Hibernate 复合密钥的manytone关系
我有一个使用复合键映射实体的遗留数据库。我使用EclipseJPA工具将表转换为实体,但接收到的实体不工作。在Tomcat启动期间,我收到异常:Hibernate 复合密钥的manytone关系,hibernate,jpa-2.0,Hibernate,Jpa 2.0,我有一个使用复合键映射实体的遗留数据库。我使用EclipseJPA工具将表转换为实体,但接收到的实体不工作。在Tomcat启动期间,我收到异常: xxx.FuelCardEntity.petrolStationInfo引用xxx.PetrolStationInfoEntity的引用列名称(加油站ID、提供商ID)未映射到 单一属性 复合密钥类: @Embeddable public class PetrolStationInfoEntityPK implements Serializable {
xxx.FuelCardEntity.petrolStationInfo引用xxx.PetrolStationInfoEntity的引用列名称(加油站ID、提供商ID)未映射到
单一属性
复合密钥类:
@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;
我找到的唯一建议是使用@JoinColumns
,但正如您所看到的,它已经存在,而且仍然不起作用。你知道如何在不改变数据库模式的情况下解决这个问题吗?
应用程序是用Spring3+Hibernate4编写的
提前谢谢 你的问题才是关键!在键obejct中有3个属性-JPA假设您需要所有3列来进行唯一标识。因此,当您尝试将@JoinColumns仅用于前2列时,它会抛出一个错误,因为他预期为3列。当您将第三列版本添加到@JoinColumns时,它应该可以工作 是的,我刚写完这篇文章就发现这个问题缺少专栏,这很有帮助!:)有趣的是,实体是用JPA工具生成的,所以我不确定为什么缺少第三列。我的盲目猜测是,它创建了带有“@Column(name=“\VERSION\”)的
PetrolStationInfoEntityPK
。看来第二个双引号就是它被省略的原因。