我有三张桌子:
域
|Field |Type |
| id | BIGINT |
| domain | VARVHAR(45) |
| other | ... |
网址
|Field |Type |
| id | BIGINT |
| domain_id | BIGINT |
| url | VARCHAR(45) |
| other | ... |
数据
|Field |Type |
| id | BIGINT |
| type | ENUM('DOMAIN','URL') |
| entity_id | BIGINT |
| data | ... |
在其他字段下,包含在域和 Url 表中,我理解了一些字段,它们之间的类型各不相同。
数据表中的field entity_id 必须包含表域或 Url 中的ID,具体取决于值数据表中的类型字段。
如何为Hibernate使用创建这个xml映射?
答案 0 :(得分:1)
对于我的观点,您最好使用@Inheritence
并将Data
表映射到父实体,如下所示:
@Entity
@Table(name="MODEL")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="entity_type",discriminatorType=DiscriminatorType.STRING)
public abstract class Model{
@Id
private int id;
//other common attributes
//getters& setters
}
然后是您的Domain
和Url
类
@Entity
@DiscriminatorValue(value="domain")
public class Domain extends Model{
private String domain;
//getters&setters
}
//
@Entity
@DiscriminatorValue(value="url")
public class Url extends Model{
@ManyToOne
private Domain domain;
private String url;
//getters & setters
}
这将创建一个名为MODEL
的表格,该表格将包含两种类型(Domain
和Url
),其中包含一个额外的列(entity_type
),该列将作为值"domain"
或"url"
取决于记录类型。
稍后在您的数据实体中:
@Entity
public class Data{
private int id;
@ManyToOne
private Model model;
}
Ps:您需要在type
实体中添加 Data
属性,同时拥有离散列 entity_type
< / p>