我有两个表。复合主键选择 - Hibernate的哪些功能不适用于EclipseLink。为什么?
CREATE TABLE profile_table
(
profile_id NUMBER(10,0) PRIMARY KEY,
creator_manager_id NUMBER(10,0),
lastupdate DATE,
description VARCHAR2(255 BYTE),
profile_name VARCHAR2(255 BYTE),
creatorname VARCHAR2(255 BYTE)
);
CREATE TABLE profile_basket_table
(
profile_id NUMBER(10,0),
from_id NUMBER(10,0),
action NUMBER(10,0),
constraint pbt_pk_constraint PRIMARY KEY(profile_id, from_id),
constraint pbt_fk_constraint FOREIGN KEY(profile_id) REFERENCES profile_table(profile_id)
);
我有1个配置文件和* ProfileItem。
1配置文件--- * ProfileItems(一个配置文件可以有许多ProfileItems)。
注意:1.它是一个从profile到profileItem的一对多关系。 2.它是一种单向关系。
配置文件的PK是profile_id。
的PK ProfileItem是一个复合主键(PROFILE_ID,from_id)
首先,我想我喜欢抱怨的EclipseLink不工作,如Hibernate:
1日问题与EclipseLink的: 只是becasue我有一个名为ProfileItem的子实体中的复合主键,它迫使我使用JoinColumns。我不能使用@JoinColumns作为其他列from_id不是任何其他表的外键。
@Entity
@Table(name="profile_table")
class Profile {
@Id
@Column(name="profile_id")
private Integer profileId ;
...
/**
* WORKS WITH HIBERNATE AS PERSISTENCE PROVIDER, BUT FAILS WITH ECLIPSELINK
*/
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name= "profile_id", referencedColumnName="profile_id")
private Set<XVMUpdateProfileItem> profileItems = null;
...
}
以上代码抛出下面的错误与EclipseLink的: 我最初使用与Hibernate的完美工作如下相同注释
The @JoinColumns on the annotated element [field profileItems] from the entity class [class arun.ucerelay.datastructures.XVMUpdateProfile] is incomplete. When the source entity class uses a composite primary key, a @JoinColumn must be specified for each join column using the @JoinColumns. Both the name and the referencedColumnName elements must be specified in each such @JoinColumn.
一些如何与几个排列@JoinColumn注解的组合,我管理让这个工作负载配置文件和相关的配置文件项目。
/**
* WORKS WITH ECLIPSELINK AS PERSISTENCE PROVIDER
*/
@OneToMany(cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name= "profile_id", referencedColumnName="profile_id" , insertable = true, updatable = true),
@JoinColumn(name= "profile_id", referencedColumnName="profile_id" , nullable = false)
})
private Set<XVMUpdateProfileItem> profileItems = null;
这没有意义再次声明@JoinColumn ...但奇怪的是它与eclipselink工作。这是一个错误。不是吗?
任何人都可以告诉我,如果我失去了什么?有没有其他正确的方式来实现单向关系,请告诉我。
这是一个关于@JoinColumns的bug吗?我应该登录吗?
这就是所谓的“便携性”从一个持久性提供者到另一个??????? 如果它不解决可移植性,那么使用JPA规范有什么用处。
保存父级和级联子项的第二个问题与休眠一起使用,并且不适用于eclipselink。我把它作为一个单独的问题发布,以保持简洁和精确。
谢谢。 Arun Kandregula
作为参考,DataNucleus将(http://www.datanucleus.org)适用于该元数据细;只有一个@JoinColumn,因为这是识别ProfileItem中链接回配置文件(具有单个PK字段)的FK。 – DataNucleus 2011-04-02 14:38:49