【发布时间】:2010-09-17 07:56:15
【问题描述】:
我有一个表 Category 和一个表 TranslatableText。分类是这样的
create table Category (
id int not null,
parent_id int default 0,
TranslatableDescriptionId int default 1,
primary key(id));
create table TranslatableText (
id int not null,
lang enum ('NO','EN','FR'),
text mediumtext,
primary key(id, lang));
在我的 Category 实体中,我定义了一个映射:
@Fetch(FetchMode.SUBSELECT)
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
@OneToMany(fetch=FetchType.LAZY)
@JoinColumn(name="TranslatableDescriptionId")
@ForeignKey(name="FK_TranslatableTextId")
private Set<TranslatableText> translatableText;
但是当它执行时,它会尝试访问 TranslatableDescriptionId,而不是 id。即使 TranslatableText 实体已定义
@Id
@Column(name = "id", nullable = false)
private Integer id;
@Id
@Column(name = "lang", nullable = false)
@Enumerated(EnumType.STRING)
private String lang;
@Column(name = "text", length = 400, nullable = false)
private String text;
选择了错误名称的查询:
选择translatab0_.TranslatableDescriptionId as Translat4_13_1_, translatab0_.id as id1_, translatab0_.lang as Lang1_, translatab0_.id as id22_0_, translatab0_.lang as Lang22_0_, translatab0_.text as Text22_0_ from tblTranslateableText translatab0_ where translatab0_.TranslatableDescriptionId in ('1 ','119','103','116','121','107','113','101','109','105','123','106','125', '124', '114')
如果我将映射 @JoinColumn 更改为读取
@JoinColumn(name="TranslatableDescriptionId", referencedColumnName="id")
加载我的应用时出现以下错误:
org.hibernate.MappingException: 无法在 org.hibernate.mapping.Table(Category) 及其相关的超级表和辅助表中找到逻辑名称为 id 的列
我也试过了:
@JoinColumn(name="id", referencedColumnName="TranslatableDescriptionId")
这给了我错误:
org.hibernate.MappingException:无法在 org.hibernate.mapping.Table(Category) 及其相关的超级表和辅助表中找到具有逻辑名称的列:TranslatableDescriptionId
对我应该做什么有什么建议吗?我真的希望 Category 的 translateableText 包含其描述的所有翻译,所以我很想加入 Category.TranslatableDescriptionId==TranslatableText.id
更新1: TranslatableText 被许多实体使用,因此在其中放入 categoryId 并反转关系不是一种选择。
更新2:
我能够加载它说@JoinColumn(name="id"),但这导致了Hibernate 中的ClassCastException,它没有一个整数作为键,而是有一个包含单个整数作为键的数组。这无法制成字符串,因此无法制成正确的 SQL。所以它可能仍然不是我想要的映射
干杯
尼克
【问题讨论】:
标签: java hibernate orm hibernate-onetomany