2016-10-11 48 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() 
相关问题