加入非主键列时,JPA @JoinColumn会出现问题

时间:2012-07-08 20:51:26

标签: java jpa

我想基于一个方向连接来连接表,这是我的代码:

Class Person {

@id
String person_sk;

int person_id;

String Person_name;

@OneToMany
@joinColumn (name="person_reference_id")
List<address> getAddresses() {}

}

class Address
{

@id
int person_reference_id (referred from Person);

@id
int address_id;

@id
int phone_id;

String street_name, zip_code;

}

现在当我执行getAddress时,它不起作用,因为我的连接基于person_ref_id,Person类中的@id(primaryKey)列是person_sk。

如果我使用referencedColumn,那么它也不起作用。

2 个答案:

答案 0 :(得分:2)

  1. JPA does not allow references to non-PK columns

  2. ReferencedColumn property is used to specify join column, when there is a composite PK in referenced table

  3.   

    我怎样才能做到这一点?

    规范化您的数据库以使用常见的PK-FK关系。如果需要 - 定义复合PK。

答案 1 :(得分:-1)

不寻常的数据模型,您可能需要重新考虑它。

此外,通常最好使用mappedBy和逆@ManyToOne定义@OneToMany。

JPA不直接支持您的数据模型,但如果您使用的是EclipseLink,则可以使用DescriptorCustomizer定义OneToManyMapping并使用您需要的任何外键或连接条件。