我在使用@OneToMany
注释引用另一个类中的复合主键时遇到问题。
我的复合主键类如下:
@Entity
@Table(name = "name_entry")
public class NameEntry {,
@EmbeddedId
private NameEntryPK id;
//getters, setters
}
复合Id类是这样的:
@Embeddable
public class NameEntryPK implements Serializable {
@Column(name = "entry")
protected String entry;
@Column(name = "name")
protected String name;
//getters, setters
}
这对我来说很清楚,而且工作完美。问题发生在另一个地方。我想要另一个具有NameEntry
主键的外键的类。我写过类似的东西:
@Entity
@Table(name = "content_entry")
public class ContentEntry {
//id, other columns
@OneToOne
@JoinColumns ({
@JoinColumn(name = "entry_content", referencedColumnName = "entry", insertable = false, updatable = false),
@JoinColumn(name="title_name", referencedColumnName = "name", insertable = false, updatable = false)
})
protected NameEntry nameEntry;
//getters, setters
}
根据这个我的例外是:
Invocation of init method failed; nested exception is org.hibernate.MappingException:
Unable to find column with logical name: `entry` in
org.hibernate.mapping.Table(name_entry) and its related supertables and
secondary tables
根据这个:https://hibernate.onjira.com/browse/HHH-7713?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel我试图用赋予的重音包围列名。但它没有用。
答案 0 :(得分:2)
我不知道这个问题与列名的情况有关,因为看起来你的映射不正确。您指定的连接列表示存在引用“条目”字段的“entry_content”字段,但您设置引用以使其从“name_entry”变为“content_entry”。因此,它正在寻找ContentEntry类中“entry”字段的映射,但找不到它。我认为你打算放的是“entry”有一个referencedColumnName为“entry_content”。尝试切换它们,看看是否有帮助。
映射本身虽然对我没有多大意义。如果使用的外键是NameEntry的主键 - 这将是唯一的,我不会看到ContentEntry如何有多个NameEntry。如果不是相反,那么NameEntry可以有多个ContentEntry,而ContentEntry与一个NameEntry有一个ManyToOne关系?如果没有,您可能想要描述您想要的表格或对象图形应该是什么样的,并从那里开始工作。