【发布时间】:2015-09-28 12:25:43
【问题描述】:
我的数据库中有三张表,一张用于房屋,一张用于用户。 在这种情况下,用户可以拥有很多房子。
每个 House 都有一个唯一的生成 Id(PK)。用户的用户名是 Id(PK)。并且用户在他们的类中有一个包含房屋对象的集合。
假设用户 foo 添加了 3 个拥有钥匙的 houes; 1, 2, 3 然后用户栏继续使用密钥 1 添加房子,然后我得到休眠错误,说我有重复的密钥。
sep. 28, 2015 2:06:00 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Duplicate entry '1' for key 'UK_r5dofs84kmj9k4a73t03avcce'
sep. 28, 2015 2:06:00 PM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
我在环顾多对多,以及一些人是如何做到这一点的。但请注意,我的家庭课程也会有一个用户收藏。这在我的代码中根本没有任何功能。
下面是我的两节课。
用户类
@Entity
public class User {
@Id
private String username;
private String firstname;
private String lastname;
@OneToMany(fetch=FetchType.EAGER)
private Collection<Houses> houses = new ArrayList<>();
public User() {
}
public User(String username) {
this.username = username;
}
public Collection<Houses> getHouses() {
return houses;
}
public void setHouses(Collection<Marker> houses) {
this.houses = houses;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
}
家居类
@Entity
@Table(name="house")
public class House{
private String address;
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private long projectId;
public House() {
}
public House(String address) {
this.address = address;
}
public long getProjectId() {
return projectId;
}
public void setProjectId(long projectId) {
this.projectId = projectId;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
我不知道有什么问题,我错在这是一个 OneToMany 关系吗?
【问题讨论】:
-
如果每个用户可以拥有多个房屋并且每个房屋可以拥有多个用户(居民)是多对多。