2016-10-11 6 views
1

フィールドの値を別のエンティティから取得する必要があります。私は次のモデルがあります:他のエンティティ(Hibernate)からのフィールドの値を取得する方法

@Entity 
public class ProductOwnerFields { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    private String customValue; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "templateField_id") 
    private TemplateFields templateFields; 

    private int order; 
    //gettees and setters 
} 

@Entity 
public class TemplateFields{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

    @Column(name = "order_field") 
    private int order = 0; 

    @Column(name = "name") 
    private String name; 
    //gettees and setters 
} 

どのように私はTemplateFieldsの「ORDER」とProductOwnerFieldsの「ORDER」をフィールドに設定し、フィールドの値を得ることができますか? JPAまたはHibernateアノテーションだけが必要です。EntityManagerを使用してください。

私はEntityManager.find(ProductOwnerFields .class、id)を作成し、ProductOwnerFieldsのオブジェクトをTemplateFieldsの "order"から "order"値で取得する必要があります。これは、あなたの質問に答えることができますが、推奨されません

@Entity 
public class ProductOwnerFields { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    private String customValue; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "templateField_id") 
    private TemplateFields templateFields; 

    private int order; 

    @PostLoad 
    public void postLoad() { 
     if(templateFields != null) { 
      this.order = templateFields.getOrder(); 
     } 
    } 
} 

+1

を? –

+0

ProductOwnerFieldsの "Order"はデータベースに格納されません。将来的にはProductOwnerFieldsレベルの@OrderBy "order"をソートするために使用します –

+0

ProductOwnerFields setterの順番でTemplateFields getterを呼び出してください! – FuSsA

答えて

0

その

@Entity 
public class ProductOwnerFields { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    private String customValue; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "templateField_id") 
    private TemplateFields templateFields; 

    @OneToOne(fetch = FetchType.EAGER) 
    private TemplateFields templateFields; 
} 

@Entity 
public class TemplateFields{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

    @Column(name = "order_field") 
    private int order = 0; 

    @Column(name = "name") 
    private String name; 
} 
+0

Javaでは、同じクラスの同じ名前のフィールドを2つ持つことはできません!コンパイラエラー –

+0

あなたは正しく、私の悪いです。私は赤いコードトウを速く赤くする。 – Zorglube

1

のようなものを試してみてはこれを試すことができます。 JPAでは、CriteriaQueryを作成し、ProductOwnerFieldsタイプの「templateFields」の検索基準「order」フィールドを直接挿入することができます。 ProductOwnerFieldsに「注文」フィールドを持つ必要はありません。

あなたはCriteriaQueryを使用する方法を知って、この上で見ることができます:あなたは熱心利用する際https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

1

、それはできるだけ早くエンティティまたはコレクションをロードで構成、アプリケーションがその後、それらを使用するかどうかの かかわらずにかない。

次にあなたが使用してコードを取得することができます:あなたは両方のエンティティでそれらを必要とする理由は、同じ値であれば

productField.getTemplateFields().getOrder() 
関連する問題