org.hibernate.MappingException:实体映射中的重复列
我正在做一个简单的民意调查系统。 我有2张桌子:
Person
:身份证,姓名,姓氏
Vote
:ID,投票(布尔),VoterID(实际上是FK_PersonID
),PersonID(这实际上FK_PersonID
)。
我需要能够识别谁投票以及投票的对象 – 使用存储在Person
表中的Person
来满足这些需求。 表Person
包含可以“投票”以及“投票”的人的用户详细信息。 人们可以决定是否要为自己投票。
我在我的domain
对象中映射了我的表,如下所示:
人
private Integer ID; private String name; private String surname; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "ID") public Integer getID() { return ID; } public void setID(Integer ID) { this.ID = ID; } @Column(name = "name") public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(name = "surname") public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; }
投票
private Integer ID; private Person voter; private Person person; private Boolean vote; @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "ID") public Integer getID() { return ID; } public void setID(Integer ID) { this.ID = ID; } @Column(name = "vote") public Boolean getVote() { return vote; } public void setVote(Boolean vote) { this.vote = vote; } @ManyToOne @JoinColumn(name = "personID") public Person getVoter() { return voter; } public void setVoter(Person voter) { this.voter = voter; } @ManyToOne @JoinColumn(name = "personID") public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; }
错误信息
引起:org.hibernate.MappingException:实体映射中的重复列:web.poll.domain.Vote列:personID(应使用insert =“false”update =“false”映射)
你对选民和人使用相同的@JoinColumn
。 更改为关联人员的@JoinColumn("personID")
和相关选民的@JoinColumn("voterID")
,一切都应该没问题。
作为旁注,因为您使用domain-driven-design
标记了这一点…如果像这样实现,您的投票类将更具DDD风格:
@Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "ID") private Integer ID; @ManyToOne @JoinColumn(name = "voterID") private Person voter; @ManyToOne @JoinColumn(name = "votedForID") private Person votedFor; @Column(name = "vote") private Boolean vote; public void cast(Person voter, Person votedFor, boolean vote) { // Maybe assert that this vote has not already been casted this.voter = voter; this.votedFor = votedFor; this.vote = vote; } public Integer getID() { return ID; } public Boolean isUpVote() { return vote; } public Boolean isDownVote() { return !vote; } public Person getVoter() { return voter; } public Person getVotedFor() { return votedFor; }
举个例子,不知道我是否得到了你的vote
布尔权的含义来指示上/下投票。
exception的原因是下面的代码片段,并且您与Vote实体的Person实体有两次关系。 为什么你需要两次关系?
@ManyToOne @JoinColumn(name = "personID") public Person getVoter() { return voter; } public void setVoter(Person voter) { this.voter = voter; } @ManyToOne @JoinColumn(name = "personID") public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; }
- BCrypt.checkpw()无效的盐版本exception
- 为什么hibernate给出了ConstraintException,就好像在已经存在的情况下尝试创建对象一样
- 审核数据库中多个表的历史记录
- 无法从无处构建Hibernate SessionFactoryexception
- 如何在EntityListeners中注入EntityManager
- 给出java.lang.IllegalArgumentException的Hibernate查询:遍历的节点不能为null
- @Where子句在hibernate join查询中不起作用
- Hibernateexception:非法尝试取消引用集合
- Hibernate EntityManager,它应该被用作单例吗?