Подтвердить что ты не робот

JPA Несколько встроенных полей с префиксом?

С аннотациями JPA, я хочу повторно использовать один и тот же встроенный объект следующим образом:

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

    @Embedded
    public Address workAddress;
}

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

Я могу указать имена столбцов SQL с @AttributeOverrides, @AttributeOverride и @Column, но это verbos. Можно ли указать только префикс для добавления в каждый столбец для homeAddress и workAddress?

Спасибо,

Ксавьер

4b9b3361

Ответ 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

Ответ 2

Имеет ту же проблему, вот решение. Работает идеально, префиксные имена полей с именем встроенного свойства (в вашем случае homeAddress_ и workAddress _)

fooobar.com/questions/83316/...

Ответ 3

добавив это работает для меня (хотя я использую Hibernate в качестве поставщика JPA)

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