У меня есть устаревшая база данных, объекты которой были сопоставлены с использованием составного ключа. Я преобразовал таблицы в объекты с Eclipse JPA Tools, но полученные объекты не работают. Во время запуска Tomcat я получаю исключение: referencedColumnNames(PETROL_STATION_ID, PROVIDER_ID) of xxx.FuelCardEntity.petrolStationInfo referencing xxx.PetrolStationInfoEntity not mapped to a single property
Отношение ManyToOne к составному ключу
Составной ключ класса:
@Embeddable
public class PetrolStationInfoEntityPK implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="PETROL_STATION_ID", insertable=false, updatable=false)
private long petrolStationId;
@Column(name="PROVIDER_ID", insertable=false, updatable=false)
private long providerId;
@Column(name = "\"VERSION\"")
private long version;
// hashCode and equals method
}
PetrolStationInfoEntity класс:
@Entity
@Table(name="PETROL_STATION_INFO")
@NamedQuery(name="PetrolStationInfoEntity.findAll", query="SELECT p FROM PetrolStationInfoEntity p")
public class PetrolStationInfoEntity implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private PetrolStationInfoEntityPK id;
}
FuelCardEntity класс держит соотношение:
public class FuelCardEntity implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private FuelCardEntityPK id;
// bi-directional many-to-one association to PetrolStationInfoEntity
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "INFO_PETROL_STATION_ID", referencedColumnName = "PETROL_STATION_ID", nullable = false, insertable = false, updatable = false),
@JoinColumn(name = "INFO_PROVIDER_ID", referencedColumnName = "PROVIDER_ID", nullable = false, insertable = false, updatable = false) })
private PetrolStationInfoEntity petrolStationInfo;
только совет я нашел alrea dy должен был использовать @JoinColumns
, но, как вы можете видеть, он уже существует, и он все еще не работает. Любая идея, как исправить проблему без изменения схемы базы данных? Приложение написано с пружиной 3 + Hibernate 4.
Заранее благодарен!
Да, я нашел эту проблему без колонки сразу после написания сообщения, и это помогло! :) Интересная часть состоит в том, что объекты были созданы с помощью JPA-инструментов, поэтому я не уверен, почему отсутствовал третий столбец. Моя слепая догадка заключается в том, что она создала 'PetrolStationInfoEntityPK' с' @Column (name = "\ VERSION \" "). Похоже, эти две двойные кавычки были проблемой, почему она была опущена. – Nav