JPA @ElementCollection @Embeddable элементов с помощью @AttributeOverride - PullRequest
0 голосов
/ 18 мая 2018
@Embeddable
public class Address {
  @Column(name="str")
  private String street;

  @Column(name="nr")
  private int number;

  // getters/setters
}

, а адрес @Embeddable используется в двух местах в пользовательском элементе как: адрес User.mainAddress и список User.otherAddresses:

@Entity
public class User {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private long id;

  @AttributeOverrides({
    @AttributeOverride(
      name="street", 
      column=@Column(name="main_user_address_street")),
    @AttributeOverride(
      name="number", 
      column=@Column(name="main_user_address_number"))
  })
  private Address mainAddress;

  @ElementCollection
  @CollectionTable(
    name="user_addresses", 
    joinColumns=@JoinColumn(name="user_id"))
  @AttributeOverrides({
    @AttributeOverride(
      name="street", 
      column=@Column(name="other_user_address_street")),
    @AttributeOverride(
       name="number", 
       column=@Column(name="other_user_address_number"))
  })
  private List<Address> otherAddresses;

  // getters/setters
}

Это создает таблицы следующим образом:

user(ID, main_user_address_street, main_user_address_number)
user_addresses(nr, str, user_id)

Вопрос:

@ AttributeOverrides для User.otherAddresses кажется, что они игнорируются, я ожидал, что таблица user_addresses будет иметь структуру столбца как:

user_addresses(other_user_address_number, other_user_address_street, user_id)

Яотсутствует или это ожидаемый результат?

Зависимости:

  • org.eclipse.persistence / javax.persistence / 2.2.0
  • org.eclipse.persistence/eclipselink/2.7.1
  • org.mariadb.jdbc / mariadb-java-client / 2.2.4

  • Java-версия: 1.8

...