У меня двунаправленное сопоставление OneToMany между работодателями и адресами. Адреса выбираются с нетерпением. Когда запрашивается запись работодателя, sql, сгенерированный hibernate, имеет ошибки, приводящие к SQLSyntaxErrorException
java.sql.SQLSyntaxErrorException: ORA-00904: "ADDRESSES0_"."EMPLOYER_EMPR_ACCT_ID": invalid identifier.
Я предоставил сопоставления и сгенерированный sql.
Это отображение работает как положено в OpenJPA, но не в Hibernate. Отображение кажется правильным, но не уверен, почему имя столбца в сгенерированном sql неверно. Любая помощь в этом очень ценится.
@Entity
@Table(name = "UI_EMPLOYER")
public class Employer extends AbstractAuditableEntity {
@Id
@Column(name = "EMPR_ACCT_ID", nullable = false, updatable = false,
length = 8)
@Min(value = 0)
@Max(value = 99999999)
private Long employerAccountId;
// bi-directional many-to-one association to EmployerAddress
@OneToMany(mappedBy = "employer", cascade = ALL, , fetch = EAGER)
@OrderBy
private List<EmployerAddress> addresses;
}
@Entity
@Table(name = "UI_EMPR_ADDR")
public class EmployerAddress extends AbstractAuditableEntity {
@EmbeddedId
private EmployerAddressPK id;
// bi-directional many-to-one association to Employer
@ManyToOne(optional = false)
@PrimaryKeyJoinColumn(name = "EMPR_ACCT_ID",
referencedColumnName = "EMPR_ACCT_ID")
private Employer employer;
// bi-directional many-to-one association to Address
@ManyToOne(optional = false, cascade = ALL)
@JoinColumn(name = "UI_ADDRESS_SEQ_ID",
referencedColumnName = "UI_ADDRESS_SEQ_ID")
private Address address;
}
@Embeddable
public class EmployerAddressPK implements Serializable {
@Column(name = "ADDR_TYP_CD", length = 4, nullable = false,
updatable = false)
@Enumerated(STRING)
@NotNull
private AddressType addressType;
@Column(name = "EMPR_ACCT_ID", updatable = false, length = 8,
nullable = false)
private Long employerAccountId;
}
@Entity
@Table(name = "UI_ADDRESS")
public class Address extends AbstractAuditableEntity {
@Id
@Column(name = "UI_ADDRESS_SEQ_ID", length = 10, nullable = false,
updatable = false)
@GeneratedValue(strategy = SEQUENCE, generator = "UI_ADDRESS_SEQ")
@SequenceGenerator(name = "UI_ADDRESS_SEQ", sequenceName = "UI_ADDRESS_SEQ",
allocationSize = 1)
private Long addressId;
// bi-directional many-to-one association to EmployerAddress
@OneToMany(mappedBy = "address")
private List<EmployerAddress> employerAddresses;
}
Запрос, сгенерированный hibernate:
SELECT
addresses0_.employer_empr_acct_id AS employer_empr_acct9_9_0_,
addresses0_.addr_typ_cd AS addr_typ_cd1_9_0_,
addresses0_.empr_acct_id AS empr_acct_id2_9_0_,
addresses0_.addr_typ_cd AS addr_typ_cd1_9_1_,
addresses0_.empr_acct_id AS empr_acct_id2_9_1_,
addresses0_.ui_address_seq_id AS ui_address_seq_id8_9_1_,
addresses0_.employer_empr_acct_id AS employer_empr_acct9_9_1_,
address1_.ui_address_seq_id AS ui_address_seq_id1_3_2_,
address1_.addr_1 AS addr_6_3_2_,
address1_.addr_2 AS addr_7_3_2_
FROM
uitax.ui_empr_addr addresses0_
INNER JOIN uitax.ui_address address1_ ON addresses0_.ui_address_seq_id = address1_.ui_address_seq_id
WHERE
addresses0_.employer_empr_acct_id =?
ORDER BY
addresses0_.addr_typ_cd ASC,
addresses0_.empr_acct_id ASC