【发布时间】:2015-04-15 23:21:53
【问题描述】:
我想根据item_type 值将order 表与不同的项目表(book 或food)连接起来。如果item_type 为0,则item_id 应该来自book 表。如果item_type 为1,则item_id 应该来自food 表。
以下是示例表。我希望他们能帮助你理解我的问题。
create table order{
id int(11) unsigned NOT NULL AUTO_INCREMENT,
item_type int,
item_id int
}
create table book{
id int(11) unsigned NOT NULL AUTO_INCREMENT,
desc varchar(100)
}
create table food{
id int(11) unsigned NOT NULL AUTO_INCREMENT,
field1 varchar(100)
}
我尝试过使用@wherejointable 注释。
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "item_id",insert="false" update="false")
@WhereJoinTable(clause = "item_type=0")
public Book getBook() {
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "item_id",insert="false" update="false")
@WhereJoinTable(clause = "item_type=1")
public Food getFood() {
}
但是,我收到以下错误:
Repeated column in mapping for entity: column: item_id (should be mapped with insert="false" update="false")
这可以在hibernate中实现吗?
【问题讨论】:
-
我不知道您对
order表的用途,但我想将order分成两个表BookOrder和FoodOrder比尝试根据行的“类型”有选择地加入不同的表。 -
您是否可以更改字段或将一些表添加到您的数据库中?如果是,那么最好有一个包含食物和书籍通用字段的基表,然后将订单表连接到这个新表,即“项目”。如果修改架构不是一个选项,让我们看看什么是最好的......
标签: java sql hibernate orm hibernate-mapping