4
Hibernate映射我已經在我的數據庫下表與@Any和@JoinTable
IMAGE_TABLE {
`ID`
`NAME`
}
IMAGE_OBJECT {
`IMAGE_ID`
`OBJECT_ID`
`OBJECT_TYPE`
}
CAR {
`ID`
`DESCRIPTION`
}
HOUSE {
`ID`
`DESCRIPTION`
}
IMAGE_OBJECT錶鏈接圖像要麼買房買車(取決於OBJECT_TYPE值)。 在我ImageEntity我想用單一的實體映射領域:
@Any(
metaColumn = @Column(table="IMAGE_OBJECT", name = "OBJECT_TYPE"))
@AnyMetaDef(
idType = "long",
metaType = "string",
metaValues = {
@MetaValue(value = "car", targetEntity = CarEntity.class),
@MetaValue(value = "house", targetEntity = HouseEntity.class)
}
)
@JoinTable(name = "IMAGE_OBJECT",
joinColumns = {
@JoinColumn(name = "IMAGE_ID", unique = true)
},
inverseJoinColumns = {
@JoinColumn(name = "OBJECT_ID")
}
)
private AbstractEntity object;
但這種映射導致異常:
org.hibernate.AnnotationException: @Any requires an explicit @JoinColumn(s)
我使用@ManyToAny
還試圖映射,然後使用setter和getter存儲在採集單個元素:
@ManyToAny(
metaColumn = @Column(table="IMAGE_OBJECT", name = "OBJECT_TYPE"))
@AnyMetaDef(
idType = "long",
metaType = "string",
metaValues = {
@MetaValue(value = "car", targetEntity = CarEntity.class),
@MetaValue(value = "house", targetEntity = HouseEntity.class)
}
)
@JoinTable(name = "IMAGE_OBJECT",
joinColumns = {
@JoinColumn(name = "IMAGE_ID", unique = true)
},
inverseJoinColumns = {
@JoinColumn(name = "OBJECT_ID")
}
)
private Set<AbstractEntity> objects;
這工作,除非我嘗試清除objects
或者從中取出一個元素:
objects.clear();
給予我奇怪的例外:
org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access: SQLException for SQL [delete from IMAGE_OBJECT where IMAGE_ID=? and OBJECT_ID=?];
...
Caused by: java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).
這可能是一個bug in Hibernate,所以我不能用這個映射爲好。
有什麼辦法可以使用@JoinTable映射任何關係嗎?
它仍然是一個討厭的黑客攻擊。希望有人可以對此發表評論,目前有相同的問題:/ – test
同一個這裏... = T –