【问题标题】:The name of the variable is added to the name of the column变量的名称被添加到列的名称中
【发布时间】: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


【解决方案1】:

在UserGroup表中,有一列:

 "group_`groupId`" 

已生成(因为您使用“”来保持区分大小写。

您可以在 postgres 中编辑列的名称(以及外键):

"group_`groupId`"   --->   "group_groupId"

JPA 正在寻找 group_groupId。

【讨论】:

  • 问题是,我们是学生并且在这个项目的团队中工作,这个错误似乎只在我身边。如果其他学生具有相同的组和用户组,则会生成正确的表。这也很奇怪,这种情况只有这张桌子。
【解决方案2】:

我已经设法回答了这个问题。问题在于序列生成。在嵌入式数据库中生成时,我不知道为什么,生成类型序列不起作用。相反,我使用了 Identity 类型,一切都开始工作了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2023-03-13
    • 2013-09-11
    • 2013-01-13
    • 1970-01-01
    相关资源
    最近更新 更多