2014-02-11 1 views
0

У меня есть устаревшая база данных, объекты которой были сопоставлены с использованием составного ключа. Я преобразовал таблицы в объекты с 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.

Заранее благодарен!

ответ

1

Ваша проблема в ключе! У вас есть 3 атрибута в ключевом obejct - JPA предполагает, что вам нужны все 3 столбца для уникальной идентификации. Поэтому он выдает ошибку, когда вы пытаетесь использовать @JoinColumns только с первыми двумя столбцами, потому что он ожидает 3. Когда вы добавите третью колонку VERSION в @JoinColumns, она должна работать!

+0

Да, я нашел эту проблему без колонки сразу после написания сообщения, и это помогло! :) Интересная часть состоит в том, что объекты были созданы с помощью JPA-инструментов, поэтому я не уверен, почему отсутствовал третий столбец. Моя слепая догадка заключается в том, что она создала 'PetrolStationInfoEntityPK' с' @Column (name = "\ VERSION \" "). Похоже, эти две двойные кавычки были проблемой, почему она была опущена. – Nav

 Смежные вопросы

  • Нет связанных вопросов^_^