【发布时间】:2016-06-24 10:33:49
【问题描述】:
我有两个实体 - Group 和 UserGroup,它们与 groupId 连接。 "\" 是因为 postgre 是区分大小写的,通过这种方式我们更正了这个事实。
@Entity
@Table(name = "\"Group\"")
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "\"groupId\"")
private int groupId;
@Column(name = "\"groupName\"")
private String groupName;
@OneToMany(mappedBy = "group")
List<Project> projects;
@OneToMany(mappedBy = "group")
private List<UserGroup> members;
public Group(String groupName) {
this.groupName = groupName;
}
public Group() {
}
public int getGroupId() {
return groupId;
}
public void setGroupId(int groupId) {
this.groupId = groupId;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public List<Project> getProjects() {
return projects;
}
public void setProjects(List<Project> projects) {
this.projects = projects;
}
public List<UserGroup> getMembers() {
return members;
}
public void setMembers(List<UserGroup> members) {
this.members = members;
}
@Override
public String toString() {
return "Group{" +
"groupId=" + groupId +
", groupName='" + groupName + '\'' +
'}';
}
}
和用户组
@Entity
@Table(name = "\"UserGroup\"")
@IdClass(GroupAssociationId.class)
public class UserGroup {
@Id
@Column(name = "\"userId\"")
private int userId;
@Id
@Column(name = "\"groupId\"")
private int groupId;
@ManyToOne
@PrimaryKeyJoinColumn(name = "\"userId\"", referencedColumnName = "\"userId\"")
private User member;
@ManyToOne
@PrimaryKeyJoinColumn(name = "\"groupId\"", referencedColumnName = "\"groupId\"")
private Group group;
@ManyToOne
@JoinColumn(name = "\"accessId\"")
private Access access;
public UserGroup(Group group, User member, Access access) {
this.group = group;
this.member = member;
this.access = access;
}
public UserGroup() {
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public int getGroupId() {
return groupId;
}
public void setGroupId(int groupId) {
this.groupId = groupId;
}
public User getMember() {
return member;
}
public void setMember(User member) {
this.member = member;
}
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
public Access getAccess() {
return access;
}
public void setAccess(Access access) {
this.access = access;
}
@Override
public String toString() {
return "UserGroup{" +
"userId=" + userId +
", groupId=" + groupId +
", access=" + access.getAccessName() +
'}';
}
}
当我尝试在表 UserGroup 中创建一行时出现错误:
原因:org.postgresql.util.PSQLException:错误:关系“UserGroup”的列“group_groupId”不存在
为什么?这发生在字符串“em.getTransaction().commit() 上。真的很奇怪。
【问题讨论】:
-
为什么在“组”字段上使用“PrimaryKeyJoinColumn”?应该是 JoinColumn,字段“member”也一样
标签: postgresql jpa testing entity