我有以下实体,我需要通过Hibernate 注释 坚持到关系数据库:
@Entity @Table(name="fizzes") public class Fizz { @Id @GeneratedValue @Column(name="fizz_id") private int id; @Column(name="fizz_wooz") private String wooz; // ??? here I am unsure! private Buzz buzz; // Constructor, getters/setters down here, etc... } public class Buzz { private int jupiter; private String neptune; // Constructor, getters/setters down here, etc... }
问题Buzz是:
Buzz
fizzes
因此,我要寻找的表格形式的最终结果是:
[fizzes] table ============== fizz_id, PRIMARY KEY AUTO INCREMENT fizz_wooz, NVARCHAR(50) NOT NULL fizz_buzz_jupiter, INT NOT NULL fizz_buzz_neptune, NVARCHAR(100) NOT NULL
无法修改时,如何让Hibernate进行基于注释的映射Buzz?
您要搜索的称为Embeddable。
Embeddable
@Entity public class Fizz { ... @Embedded private Buzz buzz; }
您可以只为以下内容定义 映射文件Buzz:
<entity-mappings version="1.0" xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"> <embeddable class="...Buzz"> <attributes> <basic name="jupiter"><column name="fizz_buzz_jupiter"/></basic> <basic name="neptune"><column name="fizz_buzz_neptune"/></basic> </attributes> </embeddable> </entity-mappings>
您可以在您的中包含该映射文件persistence.xml:
persistence.xml
<persistence-unit> <mapping-file>.../orm.xml</mapping-file> </persistence-unit>
如果您真的想对以下内容使用批注Buzz:您不能为其他类定义批注。那就是注释的含义:它们是 内联的 ,属于它们的类。否则与映射文件相比将没有任何好处。
但是您可以扩展Buzz该 属性 并将其与 属性访问 一起 使用 :
@Entity public class Fizz { ... @Embedded private BuzzExtension buzz; } @Embeddable @Access(AccessType.PROPERTY) public class BuzzExtension extends Buzz { @Column(name="fizz_buzz_jupiter") public int getJupiter() { return super.getJupiter(); } @Column(name="fizz_buzz_neptune") public String getNeptune() { return super.getNeptune(); } }
唯一的缺点:您不能使用Buzzin的实例Fizz。
Fizz