1

次のエンティティがあるとします。

@Entity
@Table(name = "A")
public class A implements Serializable {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @OneToMany
  @JoinTable(name="A_B", joinColumns = @JoinColumn(name = "A_ID"),
    inverseJoinColumns = @JoinColumn(name = "B_ID"))
  private List<B> bList1;

  @OneToMany
  @JoinTable(name="A_B", joinColumns = @JoinColumn(name = "A_ID"),
    inverseJoinColumns = @JoinColumn(name = "B_ID"))
  private List<B> bList2;

  // getters and setters

}

@Entity
@Table(name = "B") 
public class B implements Serializable {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  //some other data
  //getters and setters
}

@JoinTable 構造は次のようになります。

A_B (a_id, b_id, discriminator);

bList1 と bList2 が入力されることに基づいて、注釈を使用して識別子列を指定することは可能ですか?

4

1 に答える 1

1

@Where("discriminator='list1'")投稿されたコードでは、取得時にフィルタリングするコレクションを指定できたとしても@Where("discriminator='list2'")、休止状態は挿入/更新中にディスクリミネーターを維持しないため、それは不可能です。

あなたはこれを機能させることを試みることができます(私はこれをテストしていません):

@ManyToAny(metaColumn = @Column( name = "discriminator" ) )
@AnyMetaDef(idType = "long", metaType = "string", metaValues = {
    @MetaValue( value = "list1", targetEntity = B.class ) } )
private List<B> bList1;

@ManyToAny(metaColumn = @Column( name = "discriminator" ) )
@AnyMetaDef(idType = "long", metaType = "string", metaValues = {
    @MetaValue( value = "list2", targetEntity = B.class ) } )
private List<B> bList2;

または、識別子の値を持つジョイント可能なクラスを作成し、list1 と 2 のプロパティでそれを処理します。

于 2012-05-18T11:40:44.357 に答える