0

我有两个实体OrgTypeOrgField

@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自动填充,但它没有。

有什么帮助吗?

4

1 回答 1

0

尝试如下填充fetch属性:

@ManyToOne(fetch=FetchType.EAGER)

@OneToMany(mappedBy="orgType", fetch = FetchType.EAGER)

FecthType.EAGER将根据您的需要获取它。如果愿意,您可以为每个类定义不同的值。相反,您可以使用FetchType.LAZY,明确设置此属性而不是保留要使用的默认值是一种很好的做法。

此外,您还可以使用CascadeType.ALL的属性级联来自动持久化等,或者检查 CascadeType 枚举以查看其他值。明确定义级联属性的值也是一个好习惯。

于 2013-07-01T05:07:16.110 回答