0

インストゥルメントとコンポニストと呼ばれるエンティティを使用して、muziekstuk と呼ばれるエンティティを作成しようとしています。

muziekstuk と楽器が作成され、コンポニストがドロップダウンから選択します

これはアクションコードです:

    MuziekstukDAOImpl reg = new MuziekstukDAOImpl();
    ComponistDAOImpl com = new ComponistDAOImpl();

    int componistid = Integer.parseInt(MComponist);
    Componist componist = (Componist) com.getById(componistid);

    Instrument i1 = new Instrument(MInstrument1, Integer.parseInt(MAantal1));

    Muziekstuk muziekstuk = new Muziekstuk(MTitel,MGenre,componist,i1);
    reg.save(muziekstuk);

それは新しい楽器を作成し、結合テーブルでのみmuziekstukを作成します。コンポニストのIDはnullです:S誰もが理由を知っていますか?

これが私のコードの残りの部分です: Muziekstuk:

@Entity
@Table(name = "STUD1630651.MFMUZIEKSTUK")
public class Muziekstuk {


@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
@SequenceGenerator(name="my_entity_seq_gen", sequenceName="HIBERNATE_SEQUENCE_MUZIEKSTUK")
@Column(name = "ID")
private int id;

@Column(name = "TITEL")
private String titel;

@Column(name = "GENRE")
private String genre;

@OneToOne(cascade=CascadeType.ALL)  
@JoinTable(name="MFMUZIEKSTUKJOIN",joinColumns=
{@JoinColumn(name="MUZIEKSTUKID")},inverseJoinColumns=
{@JoinColumn(name="COMPONISTID")})
private Componist componist;

@OneToOne(cascade=CascadeType.ALL)  
@JoinTable(name="MFMUZIEKSTUKJOIN",joinColumns=
{@JoinColumn(name="MUZIEKSTUKID")},inverseJoinColumns=
{@JoinColumn(name="INSTRUMENTID")})
private Instrument instrument;


public Muziekstuk(String titel, String genre, Componist componist, Instrument instrument){
    this.titel = titel;
    this.genre = genre;
    this.componist = componist;
    this.instrument = instrument;
}

public Muziekstuk(int id, String titel, String genre, Componist componist, Instrument instrument){
    this.id = id;
    this.titel = titel;
    this.genre = genre;
    this.componist = componist;
    this.instrument = instrument;
}


//GETTERS AND SETTERS

作曲者:

@Entity
@Table(name = "STUD1630651.MFCOMPONIST")  
public class Componist {

@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
@SequenceGenerator(name="my_entity_seq_gen", sequenceName="HIBERNATE_SEQUENCE_COMPONIST")
@Column(name = "ID")
private int id;

@Column(name = "NAAM")  
private String naam;

@Column(name = "LAND")  
private String land;

@Column(name = "TIJDVLAK")
private String tijdvlak;

@Column(name = "COMPOSITIES")
private String composities;


public Componist(int id, String naam, String land, String tijdvlak, String composities){
    this.id = id;
    this.naam = naam;
    this.land = land;
    this.tijdvlak = tijdvlak;
    this.composities = composities;
}

public Componist(String naam, String land, String tijdvlak, String composities){
    this.naam = naam;
    this.land = land;
    this.tijdvlak = tijdvlak;
    this.composities = composities;
}

public Componist(){
}

//GETTERS AND SETTERS

楽器:

@Entity
@Table(name = "STUD1630651.MFCOMPONIST")  
public class Componist {

@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
@SequenceGenerator(name="my_entity_seq_gen", sequenceName="HIBERNATE_SEQUENCE_COMPONIST")
@Column(name = "ID")
private int id;

@Column(name = "NAAM")  
private String naam;

@Column(name = "LAND")  
private String land;

@Column(name = "TIJDVLAK")
private String tijdvlak;

@Column(name = "COMPOSITIES")
private String composities;


public Componist(int id, String naam, String land, String tijdvlak, String composities){
    this.id = id;
    this.naam = naam;
    this.land = land;
    this.tijdvlak = tijdvlak;
    this.composities = composities;
}

public Componist(String naam, String land, String tijdvlak, String composities){
    this.naam = naam;
    this.land = land;
    this.tijdvlak = tijdvlak;
    this.composities = composities;
}

public Componist(){
}

//GETTERS AND SETTERS

DAO の save 関数:

@Override
public void save(Object t) {
  Muziekstuk muziekstuk = (Muziekstuk) t;
  System.out.println(muziekstuk.getComponist().getId());
  Session session = null;  
  Transaction transaction = null;  
  try {  
      session = HibernateUtil.getSessionFactory().openSession();  
      transaction = session.beginTransaction(); 
      session.saveOrUpdate(muziekstuk);
      transaction.commit();   
  } catch (Exception e) {  
      if (transaction != null) {  
          transaction.rollback();
          System.out.println("exception");
          e.printStackTrace();
      }  
  } finally {  
      if (session != null) {  
          session.close();  
      }  
  }  

}

これは、SQL トレースです。

Hibernate: select componist0_.ID as ID1_2_0_, componist0_.COMPOSITIES as COMPOSIT2_2_0_, componist0_.LAND as       LAND3_2_0_, componist0_.NAAM as NAAM4_2_0_, componist0_.TIJDVLAK as TIJDVLAK5_2_0_ from STUD1630651.MFCOMPONIST componist0_ where componist0_.ID=?
Hibernate: select HIBERNATE_SEQUENCE_MUZIEKSTUK.nextval from dual
Hibernate: select HIBERNATE_SEQUENCE_INSTRUMENT.nextval from dual
Hibernate: insert into STUD1630651.MFINSTRUMENT (HOEVEELHEID, NAAM, ID) values (?, ?, ?)
Hibernate: insert into STUD1630651.MFMUZIEKSTUK (GENRE, TITEL, ID) values (?, ?, ?)
Hibernate: insert into MFMUZIEKSTUKJOIN (INSTRUMENTID, MUZIEKSTUKID) values (?, ?)

3 ? MUZIEKSTUKJOINで

4

1 に答える 1

0

結合テーブルは 2 つではなく 1 つのテーブルしか参照できないことが判明したため、疑問がある場合は 2 つの結合テーブルを作成する必要があります。

于 2013-10-07T05:42:47.010 に答える