休眠:@EmbeddedId、继承和@SecondaryTable
Posted
技术标签:
【中文标题】休眠:@EmbeddedId、继承和@SecondaryTable【英文标题】:Hibernate: @EmbeddedId, Inheritance and @SecondaryTable 【发布时间】:2010-11-11 14:27:45 【问题描述】:我正在使用带有注释的 Hibernate 版本 3.3.2.GA。
我有两个类之间的继承,前者:
@Entity
@Table(name = "SUPER_CLASS")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="DISCR_TYPE",
discriminatorType= DiscriminatorType.STRING
)
@org.hibernate.annotations.Entity(mutable = false)
public class SuperClass
子类映射到二级表:
@Entity
@DiscriminatorValue("VALUE")
@org.hibernate.annotations.Entity(mutable = false)
@SecondaryTable(name = "V_SECONDARY_TABLE",
pkJoinColumns = @PrimaryKeyJoinColumn(name = "ID", referencedColumnName = "ID"))
public class SubClass extends SuperClass
@Embedded
public Field getField()
return getField;
该字段由两个不同的字段组成
@Embeddable
public class Field
@Column("FIELD_1") String field1
@Column("FIELD_2") String field2
现在,当我在 SubClass 上创建查询时,会在 SuperClass 上搜索 FIELD_1 和 FIELD_2 字段,即使它们是在子类中定义的。
我无法在字段的@Column 注释中设置表格,因为它在某处被重用的 Field 类。我需要在 SubClass 类中指定它。
如何指定该字段应在辅助表中搜索?
同样在Hibernate Forum
【问题讨论】:
【参考方案1】:你应该使用table属性
@Column("FIELD_1", table="V_SECONDARY_TABLE")
更新
当一个可嵌入列被多个实体使用时,如果只需要重新映射单个列,则应使用@AttributeOverride,如果需要重新映射多个列,则应使用@AttributeOverrides
@Entity
@SecondaryTable(name="OTHER_PERSON")
@AttributeOverride(name="address.street", column=@Column(name="STREET", table="OTHER_PERSON"))
public class Person
private Address address;
@Id
@GeneratedValue
public Integer getId() return id;
public void setId(Integer id) this.id = id;
@Embedded
public Address getAddress() return address;
public void setAddress(Address address) this.address = address;
@Embeddable
public static class Address implements Serializable
private String address;
public String getStreet() return street;
public void setStreet(String street) this.street = street;
【讨论】:
感谢您的回答。你介意给我另一个建议吗,不幸的是我忘了指定一个部分?我不能简单地将表属性放在@Column 注释中,因为它在另一个类中被重用。再次感谢以上是关于休眠:@EmbeddedId、继承和@SecondaryTable的主要内容,如果未能解决你的问题,请参考以下文章
使用 @EmbeddedId 映射时出现 Eclipse 错误
@EmbeddedId 和 @Embeddable 中的 @GeneratedValue
如何使用 @EmbeddedId 使用 Spring Data REST 和 ConversionService?
我应该使用哪个注释:@IdClass 或 @EmbeddedId