hibernate 3.6.7 : Problem with @ANY and Foreign-Key

标签 hibernate relation any

我有实体“用户”和“客户”:

@Entity
@Table(name = "USR_USER")
public class User extends PersistentObject {

   [...]

   @Any(metaColumn = @Column(name = "USR_OWNERTYPE"))
   @AnyMetaDef(idType = "long", metaType = "string", metaValues = {
         @MetaValue(targetEntity = Customer.class, value = "CST"),
         @MetaValue(targetEntity = Client.class, value = "CLT") })
   @JoinColumn(name = "USR_OWNERID")
   private PersistentObject owner;
}

@Entity
@Table(name = "CST_CUSTOMER")
public class Customer extends PersistentObject {

   @Id
   @GeneratedValue
   @Column(name="CST_ID")
   private long id;

   [...]

   // @OneToMany(mappedBy = "owner")
   private transient Set<User> users;
}

运行这个(使用spring),我得到以下异常:
Caused by: org.hibernate.MappingException: Foreign key (FK35B91BB65D577CEF:USR_USER [USR_OWNERTYPE,USR_OWNERID])) must have same number of columns as the referenced primary key (CST_CUSTOMER [CST_ID])

我不明白这一点,因为我将@AnyMetaDef(在“User”中)中的“Customer”类映射到常量“CST”。

我究竟做错了什么?

在此先感谢您的帮助
托马斯

最佳答案

“为这种关联指定外键约束是不可能的。” -- http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#mapping-types-anymapping

编辑 :@Any 的另一端您想要的是@OneToAny,而这并不存在。可能是您在不适当的地方使用了 @Any 映射。再次 from the docs :“这不是映射多态关联的常用方法,您应该仅在特殊情况下使用它。例如,对于审计日志、用户 session 数据等。”

仔细看看inheritance mapping ,看看其中一个是否不是映射你们关系的更合适的方式。

关于 hibernate 3.6.7 : Problem with @ANY and Foreign-Key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7182475/

相关文章:

java - Order By 之后的 SQL 注入(inject)

MySQL:仅在找到子项时添加父行(使用 LIKE,同一张表)

rust - 方便 'Option<Box<Any>>' 访问就一定成功?

c# - 不能在谓词中使用 IEnumerable<string>

java - 在查询周围使用 JPA 事务时,Hibernate Integrator 会导致刷新

java - Hibernate @ManytoOne 问题

java - Hibernate for SQLite 支持 envers 吗?

python - 如何在python中建立两个数字列表之间的关系

mysql - 很多表或行,在 SQL 中哪一个更高效?

protocol-buffers - Protobuf 3.0 任何类型的打包/解包