4

エンティティ「ユーザー」と「顧客」があります。

@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;
}

これを(春を使用して)実行すると、次の例外が発生しました。

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" にマップしたため、これがわかりません。

私は何を間違っていますか?

トーマスの助けを前もって感謝します

4

1 に答える 1

1

「この種の関連付けに外部キー制約を指定することはできません。」-- http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#mapping-types-anymapping

編集: @Any の反対側に必要なのは @OneToAny であり、それは存在しません。不適切な場所で @Any マッピングを使用している可能性があります。再びドキュメントから:「これは、ポリモーフィック アソシエーションをマッピングする通常の方法ではなく、特別な場合にのみ使用する必要があります。たとえば、監査ログ、ユーザー セッション データなどに使用してください。」

継承マッピングをよく見て、それらのいずれかが関係をマッピングするより適切な方法ではないかどうかを確認してください。

于 2011-08-24T21:42:58.343 に答える