【问题标题】:JPA Multiple Embedded fields with prefix?带有前缀的JPA多个嵌入式字段?
【发布时间】:2012-10-06 09:32:09
【问题描述】:

使用 JPA 注释,我想像这样重用相同的嵌入对象:

@Entity
public class User {
    @Embedded
    public Address homeAddress;

    @Embedded
    public Address workAddress;
}

@Embeddable
public class Address {
    public String code;
    public String city;
    ...
} 

我可以用@AttributeOverrides、@AttributeOverride 和@Column 指定SQL 列名,但它是冗长的。是否可以只为 homeAddress 和 workAddress 指定添加到每一列的前缀?

谢谢,

泽维尔

【问题讨论】:

标签: java jpa annotations


【解决方案1】:

如果您想使用多个相同的Embedded 类。您必须为所有列执行@AttributeOverrides。 尝试如下;

参考JPA AttributeOverrides

@Embeddable
public class Address {
    private String state;
    @Column(name = "zip_code")
    private String zip;
}

@Entity(name = "Employee")
public class Employee implements Serializable {
    @Embedded
    @AttributeOverrides({
        @AttributeOverride(name = "state", column = @Column(name = "province_1")),                       
        @AttributeOverride(name = "zip", column = @Column(name = "postal_code_2"))
    })
    private Address address_1;  

    @Embedded
    @AttributeOverrides({
        @AttributeOverride(name = "state", column = @Column(name = "province_2")),                       
        @AttributeOverride(name = "zip", column = @Column(name = "postal_code_2"))
    })
    private Address address_2;  

}   

我的建议是,如果您的 Entity 中有一个或多个 Embedded 值。尝试使用@CollectionTable

@CollectionTable(name = "EMPLOYEE_ADDRESS", joinColumns = @JoinColumn(name = "ADDRESS_ID"))
private List<Address> addressList;

参考JPA CollectionTable

【讨论】:

  • 谢谢,我知道这个解决方案,但它很冗长。是否有任何解决方案可以减少冗长,例如使用“前缀”或“后缀”(您的示例中为“_1”或“_2”)之类的东西?
  • 对于任何尝试上述操作并遇到编译错误的 Groovy 用户,解决方案是将 @AttributesOverrides 注释中的 { } 替换为 [ ]。
【解决方案2】:

添加这个对我有用(虽然我使用 hibernate 作为 JPA 提供程序)

<property name="hibernate.implicit_naming_strategy" value="org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl" />

【讨论】:

  • 在 spring boot (2.3.6) 中是:spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl
猜你喜欢
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 2011-11-02
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
相关资源
最近更新 更多