我想在数据库中保存一行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();
}
答案 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);