Java 使用@Any和@JoinTable进行hibernate映射
我的数据库中有以下表格Java 使用@Any和@JoinTable进行hibernate映射,java,hibernate,Java,Hibernate,我的数据库中有以下表格 IMAGE_TABLE { `ID` `NAME` } IMAGE_OBJECT { `IMAGE_ID` `OBJECT_ID` `OBJECT_TYPE` } CAR { `ID` `DESCRIPTION` } HOUSE { `ID` `DESCRIPTION` } 图像\对象表将图像链接到汽车或房屋(取决于对象\类型值)。 在我的ImageEntity中,我想用单个实体映射字段: @Any(
IMAGE_TABLE {
`ID`
`NAME`
}
IMAGE_OBJECT {
`IMAGE_ID`
`OBJECT_ID`
`OBJECT_TYPE`
}
CAR {
`ID`
`DESCRIPTION`
}
HOUSE {
`ID`
`DESCRIPTION`
}
图像\对象表将图像链接到汽车或房屋(取决于对象\类型值)。
在我的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)
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).
我还尝试使用@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;
给我一个奇怪的例外:
org.hibernate.AnnotationException: @Any requires an explicit @JoinColumn(s)
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).
这可能是一个,所以我不能使用这个映射
是否有任何方法可以使用@JoinTable映射任何关系?我最终得到了最后一个映射,并以以下方式编写setter和getter:
...
private Set<AbstractEntity> objects = new HashSet<AbstractEntity>();
...
public AbstractEntity getObject() {
return objects.isEmpty() ? null : objects.get(0);
}
public void setObject(AbstractEntity object) {
// objects.clear() results in weird exception
objects = new HashSet<AbstractEntity>();
if (object != null) {
objects.add(object);
}
}
。。。
private Set objects=new HashSet();
...
公共抽象实体getObject(){
返回objects.isEmpty()?null:objects.get(0);
}
公共void setObject(抽象实体对象){
//objects.clear()会导致奇怪的异常
objects=newhashset();
if(对象!=null){
对象。添加(对象);
}
}
这仍然是一个令人讨厌的黑客行为。希望有人能对此发表评论,目前有相同的问题:/same here=T