0

Penatu の行をデータベースに保存したいと思います。私は3つのエンティティを持っています。

3 つのエンティティを作成する必要がありますか? または、保存する他のプロパティを設定するためにエンティティ オブジェクトのみを使用できますか?

@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();

   }
4

1 に答える 1

2

いいえ、ちがいます。試してみると、nullPointerExceptionadmin.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);
于 2013-08-20T17:31:18.467 に答える