Hibernate 中的反向继承映射
Reverse inheritance mapping in Hibernate
我有三个 tables:
域
|Field |Type |
| id | BIGINT |
| domain | VARVHAR(45) |
| other | ... |
Url
|Field |Type |
| id | BIGINT |
| domain_id | BIGINT |
| url | VARCHAR(45) |
| other | ... |
数据
|Field |Type |
| id | BIGINT |
| type | ENUM('DOMAIN','URL') |
| entity_id | BIGINT |
| data | ... |
在 other 字段下, 包含在 Domain 和 Url tables 我了解一些字段,它们之间的类型不同。
entity_id 字段 Data table 必须包含来自 table 的 ID 域 或 Url 取决于 中 type 字段的值数据 table.
如何创建此 xml 映射供 Hibernate 使用?
我认为,您最好使用 @Inheritence
并将 Data
table 与父实体映射,如下所示:
@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
的 table,它将有 2 种类型(Domain
和 Url
)以及一个额外的列(entity_type
)根据记录类型,它将作为值 "domain"
或 "url"
。
稍后在您的数据实体中:
@Entity
public class Data{
private int id;
@ManyToOne
private Model model;
}
Ps:当您拥有鉴别器列 [=39= 时,您不再需要在 Data
实体中添加 type
属性]entity_type
我有三个 tables:
域
|Field |Type |
| id | BIGINT |
| domain | VARVHAR(45) |
| other | ... |
Url
|Field |Type |
| id | BIGINT |
| domain_id | BIGINT |
| url | VARCHAR(45) |
| other | ... |
数据
|Field |Type |
| id | BIGINT |
| type | ENUM('DOMAIN','URL') |
| entity_id | BIGINT |
| data | ... |
在 other 字段下, 包含在 Domain 和 Url tables 我了解一些字段,它们之间的类型不同。
entity_id 字段 Data table 必须包含来自 table 的 ID 域 或 Url 取决于 中 type 字段的值数据 table.
如何创建此 xml 映射供 Hibernate 使用?
我认为,您最好使用 @Inheritence
并将 Data
table 与父实体映射,如下所示:
@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
的 table,它将有 2 种类型(Domain
和 Url
)以及一个额外的列(entity_type
)根据记录类型,它将作为值 "domain"
或 "url"
。
稍后在您的数据实体中:
@Entity
public class Data{
private int id;
@ManyToOne
private Model model;
}
Ps:当您拥有鉴别器列 [=39= 时,您不再需要在 Data
实体中添加 type
属性]entity_type