Hibernate

时间:2016-06-07 07:39:23

标签: java hibernate orm hibernate-mapping

我有三张桌子:

|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映射?

1 个答案:

答案 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
}

然后是您的DomainUrl

@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的表格,该表格将包含两种类型(DomainUrl),其中包含一个额外的列(entity_type),该列将作为值"domain""url"取决于记录类型。

稍后在您的数据实体中:

@Entity
public class Data{
private int id;
@ManyToOne
private Model model;
}

Ps:您需要在type实体中添加 Data 属性,同时拥有离散列 entity_type < / p>

相关问题