【发布时间】:2013-04-06 00:40:33
【问题描述】:
我的问题很简单:
一个user 有一个address,address 由city、state 和country 组成。
所以我有这个结构:
public class User {
..
//bi-directional many-to-one association to UserAddress
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name="id_user_address")
private UserAddress userAddress;
..
}
请注意,CascadeType没有有CascadeType.ALL,因为如果用户被删除,它不会影响创建的cities, states and countries。
public class UserAddress {
..
//bi-directional many-to-one association to AddressCity
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.})
@JoinColumn(name="id_city")
private AddressCity addressCity;
//bi-directional many-to-one association to AddressCountry
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name="id_country")
private AddressCountry addressCountry;
//bi-directional many-to-one association to AddressState
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name="id_state")
private AddressState addressState;
..
}
我的问题是,如果我尝试注册一个具有相同 city 的用户,例如它会给我一个例外:
严重:原因:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:键“city_UNIQUE”的重复条目“Campinas”
如何避免这种constraint,保留CASCADE?
有谁知道如何在我的 JSF 项目中显示 JPA 所做的查询?
【问题讨论】: