У меня проблема с одним Entity
, который содержит unique_key
, так что, возможно, мне нужно создать это Entity
с двумя PrimaryKey
, возможно ли это вообще?
Это мой Entity
@Entity
public class UserAnswerQuestion extends DateAudit {
@Id
@Column(name = "useranswerquestion_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "useranswerquestion_seq")
@SequenceGenerator(name = "useranswerquestion_seq", allocationSize = 1)
private Long id;
@ManyToOne
private User user;
@ElementCollection
private List<Answer> answerList;
@ManyToOne
private Question question;
private Boolean passed;
private Boolean shown;
public UserAnswerQuestion(){
}
....
И проблема, когда я пытаюсь создать этот Entity
с другим User
, он говорит:
org.postgresql.util.PSQLException: ОШИБКА: двойное значение ключа нарушает уникальное ограничение "uk_6v3tlg1gflua8r8d4wlqxo7v5"
Подробно: ключ (answer_list_answer_id) = (11) уже существует.
Так что я хотел бы сделать User
как @Id
, если это возможно, и, возможно, это решит мою проблему ...
EDIT
Я создал класс UserAnswerQuestionId
, например:
public class UserAnswerQuestionId implements Serializable {
@Column(name = "useranswerquestion_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "useranswerquestion_seq")
@SequenceGenerator(name = "useranswerquestion_seq", allocationSize = 1)
private Long id;
@Column(name ="user_id")
private Long user_id;
public UserAnswerQuestionId(){
}
public UserAnswerQuestionId(Long user_id) {
this.user_id = user_id;
}
А затем в сущности UserAnswerQuestion
я изменил ее на:
@EmbeddedId
private UserAnswerQuestionId userAnswerQuestionId;
Но ошибка теперь говорит:
org.hibernate.id.IdentifierGenerationException: null id generated for:class com.pew.model.useranswers.UserAnswerQuestion
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:192) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:62) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:800) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:785) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
Редактировать 2
Я внимательно читаю ошибку и похоже, что проблема в
@ElementCollection
private List<Answer> answerList;
Как мне решить эту проблему, чтобы этот элемент повторился на этом Entity
?
Возможно, я смогу определить эти @ElementCollection, чтобы они не были уникальными? так можно повторить на этой сущности?
Это моя Answer
сущность
@Entity(name = "answer")
public class Answer extends DateAudit {
@Id
@Column(name = "answer_id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "answer_seq")
@SequenceGenerator(name = "answer_seq", allocationSize = 1)
private Long id;
@Column(name = "answerToQuestion")
private String answerToQuestion;