我需要从另一个实体获得字段的价值。我有下一个型号:
@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的anotations,使用EntityManager。
总的来说,我需要创建EntityManager.find(ProductOwnerFields .class,id)并使用TemplateFields的“order”中的“order”值获取ProductOwnerFields的对象。
答案 0 :(得分: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并直接注入搜索条件" order"领域" templateFields" ProductOwnerFields类型。无需订购"" ProductOwnerFields中的字段。
您可以查看此内容以了解如何使用CriteriaQuery:https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/
答案 1 :(得分:1)
当你使用eager时,它包括尽快加载实体或集合, 无论申请是否随后使用它们。
然后你可以使用以下代码获取代码:
productField.getTemplateFields().getOrder()
答案 2 :(得分: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;
}