【问题标题】:JPA @JoinColumn issues while joining on non primary key columnsJPA @JoinColumn 在加入非主键列时出现问题
【发布时间】:2012-07-08 08:28:39
【问题描述】:

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

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 那么它也不起作用。

【问题讨论】:

    标签: java jpa


    【解决方案1】:

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

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

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

    【讨论】:

    • 确实如此,但由于它来自某些外部应用程序,因此无法修改,但这不是 jpa 框架支持的适当功能
    【解决方案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.

    我怎样才能做到这一点??

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

    【讨论】:

    • 没错,但它真的很奇怪为什么框架放弃你来实现这种奇怪的情况。
    • 在理想情况下这一切都很好,但每次都没有得到理想的情况,并且几乎没有任何更改可以应用于数据模型。
    • 我认为他们不支持这些荒谬的东西是件好事。只是如果他们要解决与其他层有关的每个功能,那将是过度设计的。这是您可以尝试的解决方法stackoverflow.com/a/1506775/685962
    • 当您的旧数据库实际上早于 Hibernate 并且包含数百万条记录和在数十台服务器上运行 15 年的旧业务逻辑时,告诉某人规范他们的数据库是行不通的。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2020-07-05
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    相关资源
    最近更新 更多