在Hibernate中插入带有外键的实体的正确格式是什么?

时间:2013-08-20 15:52:54

标签: hibernate

我想在数据库中保存一行Penatu。 我有三个实体。

我是否要创建三个实体?或者我可以只使用实体对象来设置另一个要保存的属性吗?

@Entity
@Table(name="PE_NATU")
public class PeNatu{
private long peNatuId;
private String apeMat;
private String apePat;
private Persona persona;
..................
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="PE_NATU_ID", unique=true, nullable=false)
  public long getPeNatuId() {
    return this.peNatuId;
}
etc .....

@Entity
@Table(name="PERSONA")
public class Persona {
private long personaId;
private Set<PeNatu> peNatus;
private TmDocIden tmDocIden;

etc .....
@Entity
@Table(name="TM_DOC_IDEN")
public class TmDocIden{
private String tipoDocId;
private Set<Persona> personas;
etc....

这是正确的吗?

//Class Service- Impl 
    PeNatu admin=new PeNatu();
    admin.setApePat("Test");
    admin.setApeMat("Test");
    admin.getPersona().setPersonaId(7777)
    admin.getPersona().getTmDocIden().setTipoDocId("05");
    long idInserted= dao.insertarPeNatu(admin)

插入id是否正确,我使用的是oracle DB吗?

   //DAO -Impl
   public long insertarPeNatu(PeNatu p) {
   Session session = sessionFactory.getCurrentSession();
   session.persist(p);
   session.flush();
   return p.natu.getPeNatuId();

   }

1 个答案:

答案 0 :(得分:2)

不,不是。如果你尝试了,你会立即看到你得到一个NullPointerException,因为admin.getPersona()将返回null,而你正试图在其上调用setPersonaId()

您正在尝试创建PeNatu并将其附加到现有角色。由于它已存在,您只需要从数据库中获取它(使用Session.get()),或者只是假设它在那里并使用Session.load()获取该实体的代理:

PeNatu admin=new PeNatu();
admin.setApePat("Test");
admin.setApeMat("Test");
Persona existingPersonaWithId7777 = (Persona) session.load(Persona.class, 7777);
admin.setPersona(existingPersonaWithId7777);
long idInserted= dao.insertarPeNatu(admin);