2016-03-09 4 views
0

У меня есть два объекта - 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() совершить() Это действительно странно

+0

Зачем использовать «PrimaryKeyJoinColumn» в поле «group»? Должен быть JoinColumn, то же для поля «member» –

ответ

0

В таблице UserGroup, колонка:

"group_`groupId`" 

был создан (потому что вы используете "" в сохранить случай чувствительную

Вы можете редактировать в Postgres имя столбца (и ключ ЗАРУБЕЖНЫЕ тоже):..

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

JPA ищет group_groupId

+0

Проблема в том, что мы являемся студентами и работаем в команде по этому проекту, и эта ошибка, кажется, только на моей стороне. В случае, если другие учащиеся с той же Группой и UserGroup генерируют правую таблицу. И тогда также странно, что эта ситуация только с этой таблицей. –

0

Мне удалось ответить на этот вопрос. Проблема заключалась в генерации последовательности. При генерации во встроенной базе данных я не знаю, почему последовательность генерации не работает. Вместо этого я использовал тип идентификации, и все началось с работы

Смежные вопросы