2016-10-11 101 views
1

我需要從另一個實體獲取字段的值。我有下一個型號:如何從另一個實體獲取字段的值(休眠)

@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 
} 

我怎樣才能得到場價值的模板列的「訂單」,並設爲場「ORDER」 ProductOwnerFields的?我只需要JPA或Hibernate的使用,使用EntityManager。

總而言之,我需要製作EntityManager.find(ProductOwnerFields .class,id),並從TemplateFields的「order」的「order」值中獲取ProductOwnerFields的對象。

+1

如果它們是相同的值,爲什麼你需要他們兩個實體? –

+0

來自ProductOwnerFields的「訂單」不會存儲在數據庫中。將來,我將使用ProductOwnerFields級別的@OrderBy「order」進行排序 –

+0

如何調用命令TemplateFields getter來訂購ProductOwnerFields setter! – 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

可以試試這個:

@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(); 
     } 
    } 
} 

這可以回答你的問題,但不推薦。 在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()