Tôi nghĩ những gì bạn đang tìm kiếm được giải thích trong Hibernate ORM phần về @Any
chú thích
:
@Any(metaColumn = @Column(name = "userType"))
@AnyMetaDef(name = "PropertyMetaDef", metaType = "string", idType = "long",
metaValues = {
@MetaValue(value = "User", targetEntity = User.class),
@MetaValue(value = "LDAP", targetEntity = LDAPUser.class)
}
)
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private Object assignedTo
Nhưng nó sẽ không tạo ra bất kỳ khóa ngoại nào.
Ngoài ra, nếu hai lớp có thể mở rộng từ một siêu lớp chung, bạn có thể sử dụng Ánh xạ kế thừa để đạt được điều gì đó tương tự.
Ví dụ:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public static class UserEntity {
@Id
private Long id;
...
}
@Entity
public class User extends UserEntity {
...
}
@Entity
public class LDAPUser extends UserEntity {
...
}
và sau đó
@ManyToOne
@JoinColumn(name="assignedto_id", referencedColumnName="id", insertable=false, updatable=false)
private UserEntity assignedto;
Điều này sẽ tạo ra ba bảng. Bảng UserEntity
sẽ có một khóa ngoại trên assignedto_id
cột. User
id và LDAPUser
mỗi id sẽ có một ràng buộc trên UserEntity
Tôi. Về cơ bản, tiến gần đến những gì bạn đã hỏi ban đầu.