我有两个实体OrgType
和OrgField
:
@Entity(name = "T_ORG_FIELD")
public class OrgField extends Model {
@MinSize(value = 2)
@Column(nullable = false)
public String name;
@ManyToOne
public OrgType orgType;
...
}
@Entity(name = "T_ORG_TYPE")
public class OrgType extends Model {
@Column(nullable = false, unique = true)
public String name;
@OneToMany(mappedBy = "orgType")
public List<OrgField> orgFields = new ArrayList<OrgField>();
...
}
现在,我正在为他们编写单元测试:
public class OrganizationTest extends UnitTest {
@Test
public void saveOrRemoveOrg() {
OrgType orgType = new OrgType("org type", "description");
orgType.save();
OrgField field = new OrgField();
field.name = "field1";
field.orgType = orgType;
field.save();
Model.em().flush();
System.out.println(OrgField.count("name = ?", "field1")); // Output : 1
int size = orgType.orgFields.size();
assertEquals(1, size); // Error , expect 1 but get 0.
...
我创建了一个新的OrgField并更新了它的orgType引用,并且预计会自动填充orgType.orgFields
,但它没有。
任何帮助?
答案 0 :(得分:0)
尝试填写 fetch 属性,如下所示:
@ManyToOne(fetch=FetchType.EAGER)
@OneToMany(mappedBy="orgType", fetch = FetchType.EAGER)
FecthType.EAGER 会根据需要获取它。如果愿意,您可以为每个类定义不同的值。相反,您可以 FetchType.LAZY ,明确设置此属性而不是保留要使用的默认值是一个很好的实践。
此外,您可以使用级联属性与 CascadeType.ALL 自动保留等,或者检查CascadeType枚举以查看其他值。明确定义级联属性的值也是一种很好的做法。