かどうかに基づいて2つのエンティティ間にオプションのManyToOneアソシエーションを作成したいのですentity1.name equals entity2.nameOf1
が、オブジェクトを追加、削除、フェッチすることでサービスレイヤーでこの関係を維持する必要はありません。エンティティを取得するときに、この関係を維持したいだけです2、 hibernateはleft join entity1 e1 on e1.name = e2.nameOf1
、selectクエリにを追加するか、entity2.getEntity1()の呼び出しを待って、where e1.name == ?
引数としてnameOf1を使用してentity1をクエリします。これまで@JoinFormulaアノテーションを使用して試しましたが、それに関するドキュメントはほとんどありません。アノテーション付きのHibernateバージョン3.5.6を使用しています。
@Entity
public class Entity1 {
@Id
@GeneratedValue
private Long id;
@Column(unique = true)
private String name;
...getter&setters...
}
@Entity
public class Entity2 {
@Id
@GeneratedValue
private Long id;
private String someProp;
private String nameOf1;
@ManyToOne(optional = true)
// How to join them? this doesn't work
// @JoinColumnsOrFormulas({ @JoinColumnOrFormula(formula =
// @JoinFormula(value = "nameOf1", referencedColumnName = "name")) })
// neither does
// @JoinColumnsOrFormulas({ @JoinColumnOrFormula(column =
// @JoinColumn(name = "nameOf1", referencedColumnName = "name",
// insertable = false, updatable = false, nullable = true)) })
//@Fetch(FetchMode.JOIN)
private Entity1 entity1;
...getter and setters...
}