2011-12-09 33 views
2

有人可以帮助我设置正确的方式来覆盖扩展实体中的列名称。jpa AttributeOverride在多个嵌入的属性

Embedeable:

@Embedable 
Email 
@Column(name = "email_adress") 
private string email; 

父实体:

@Entity 
AddressBook 
@Embedded 
@AttributeOverrides({ 
     @AttributeOverride(name="email", column = @Column(name="email_address")) 
}) 
private Email email 

扩展实体:

@Entity 
@AttributeOverrides({ 
     @AttributeOverride(name="email", column = @Column(name="home_email")) 
}) 
DeluxAddressBook extends AddressBook 
@Embeded 
@AttributeOverrides({ 
     @AttributeOverride(name="email", column = @Column(name="work_email")) 
}) 
private Email workEmail; 

在过去的实体我得到workEmail映射到 “work_email” 列这是确定的,然而,home_email被映射到最初在嵌入中定义的列“email_address”。它应该映射到“home_email”列。

我试图W/O型成功:

@AttributeOverride(name="email.email", column = @Column(name="home_email")) 

感谢您的帮助, 杰斯

回答

0

在过去映射你都AttributeOverride来name属性用于电子邮件定义映射是从基类领域。 第二个映射应该用于工作邮件而不是电子邮件。有了这个改变,你应该能够达到预期的效果。

+0

当我做你建议我得到一个org.hibernate.MappingException:实体映射中的重复列:... server.model.DeluxAddressBook列:email_address。这只是我尝试过的一个优秀游戏。我们周围的工作是创建单独的实体。 – jessarah