1

私の場合:

ラックとスロットは、カスタム ID ジェネレーターを持つエンティティです。単方向の 1 対 1 マッピングを使用しています。ディメンション テーブルは、自動生成されたカスタム ID を複数のテーブル (ここではラックとスロットなど) の外部キーとしてデータを保持します。そして、私のスキーマは次のようになります: Rack ------> Dimension <-----------Slot Dimension は、生成された ID を持つ Rack および Slot テーブルのデータを保持します。

ここでの懸念は、次のようにデータを保存しているときです:-

Rack rack = new Rack(params);
Dimension dim = new Dimension(params);
rack.setDimension(dim);
session.save(rack);

データは、ラック テーブルとディメンション テーブルに同じ自動生成 ID で正常に保存されています。

しかし、スロットテーブルのデータを保存しているとき:

Slot Slot = new Slot(params);
Dimension dim = new Dimension(params);
slot.setDimension(dim);
session.save(slot);

エラーメッセージが次のように表示されています:-

null の 1 対 1 のプロパティから ID を割り当てようとしました: ラック

Slot と Dimension のデータを保存するときは「slot」、Rack と Dimension のデータを保存するときは「rack」として動的プロパティ名を渡すことはできますか。

Rack.java

@Entity
@Table(name="tablename")
@GenericGenerator(name = "customseq", strategy = "CustomIdGenerator")
public class Rack {
  @Id
  @GeneratedValue(generator = "customseq")
  @Column(name = "uni_id")
  private String id;
  @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
  @PrimaryKeyJoinColumn
  private Dimension dimension;
  // Getters and Setters
}

スロット.java

@Entity
@GenericGenerator(name = "slot_seq", strategy = "com.slot.SlotIdGenerator")
@Table(name = "\"slot_info\"")
public class Slot implements Serializable {

  @Id
  @GeneratedValue(generator = "slot_seq")
  @Column(name = "slot_id")
  private String slotid;
  @Column(name = "rack_id")
  private String rackid;
  @Column(name = "element_id")
  private String elementid;
  @Column(name = "sr_no")
  private int srno;   
  @JoinColumn(name = "systemid", insertable = false, updatable = false)
  @PrimaryKeyJoinColumn
  private Dimension dimension;
  // getters and setters
}

Dimension.java

public class Dimension implements Serializable{
  @Id
  @Column(name = "systemid")
  @GeneratedValue(generator = "foreign")
  @GenericGenerator(name = "foreign", strategy = "foreign", parameters = {
  @Parameter(name = "property", value = "slot"),
  @Parameter(name = "property", value = "rack")})
  private String systemid;

  @OneToOne(mappedBy = "dimension", fetch = FetchType.LAZY)
  @PrimaryKeyJoinColumn
  private Rack rack;
  @OneToOne(mappedBy = "dimension", fetch = FetchType.LAZY)
  @PrimaryKeyJoinColumn
  private Slot slot;
  // Getters and Setters
}
4

0 に答える 0