Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 复合密钥的manytone关系_Hibernate_Jpa 2.0 - Fatal编程技术网

Hibernate 复合密钥的manytone关系

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 {

我有一个使用复合键映射实体的遗留数据库。我使用EclipseJPA工具将表转换为实体,但接收到的实体不工作。在Tomcat启动期间,我收到异常:
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
。看来第二个双引号就是它被省略的原因。