2015-07-19 146 views
0

我已经谁拥有许多对象春天JPA标识空

@Entity 
public class Lodger implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long lodgerId; 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "lodger") 
    private List<IdentityCard> identityCardList; 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "lodger") 
private List<Phone> phoneList; 
... 

}

@Entity 
public class IdentityCard { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long identityCardId; 

    private String identyCardValue; 

    @OneToOne 
    @JoinColumn(name = "identity_card_type_id") //without -> identity_card_type_identityCardTypeId 
    private IdentityCardType identityCardType; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "lodger_id") 
    private Lodger lodger; 
} 

当我救我的房客的实体,我所有的对象被保存(identiyCard,电话),但他们的字段lodger_id为空

我想这应该是在我们使用cascadeType.all时自动完成的。

回答

4

双directioinal协会的业主方是IdentityCardPhone实体,这是相同的话说,mappedByLodger的关联。

所以对于链接的持久性,您必须在IdentityCardPhone实体设置房客属性。没有必要将这个实体添加到Lodger的集合中,但它没有问题,因为您希望使用级联选项将此实体与Lodger一起保存。

+0

另一种可能性是什么? –

+0

@roberttrudel这是做到一对多双向关联的方法。如果您希望Lodger中的所有者一方,您可以尝试一种“解决方法”:使用多对多而不是一对多/多对一,在Phone和IdentCard中设置mappedBy,并且您应该添加其他控件将这些实体关联到一个Lodger(例如通过连接表的Phone的id字段的唯一检查约束) – Guillermo