У меня есть два объекта - 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 + '\'' +
'}';
}
}
И UserGroup
@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: ОШИБКА: столбец «group_groupId» отношения «UserGroup» не существует
Почему? Это происходит на строке «... Em.getTransaction() совершить() Это действительно странно
Зачем использовать «PrimaryKeyJoinColumn» в поле «group»? Должен быть JoinColumn, то же для поля «member» –