Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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
Java JPA@JoinColumn在连接非主键列时出现问题_Java_Jpa - Fatal编程技术网

Java JPA@JoinColumn在连接非主键列时出现问题

Java JPA@JoinColumn在连接非主键列时出现问题,java,jpa,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

我想基于单向联接连接表,下面是我的代码:

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;

}
班级人员{
@身份证
串人;
国际个人识别码;
字符串人名;
@独身癖
@joinColumn(name=“person\u reference\u id”)
列出getAddresses(){}
}
班级地址
{
@身份证
int person\u reference\u id(由person提供);
@身份证
int地址_id;
@身份证
国际电话号码;
字符串街道名称、邮政编码;
}
现在,当我执行getAddress时,它不起作用,因为我的联接基于person_ref_id,person类中的@id(primaryKey)列是person_sk

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

  • 我怎样才能让它工作

    规范化数据库以使用公共PK-FK关系。如果需要-定义复合主键

  • 我怎样才能让它工作


    规范化数据库以使用公共PK-FK关系。如果需要-定义复合主键。

    异常数据模型,您可能需要重新考虑它

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


    JPA不直接支持您的数据模型,但如果您使用的是EclipseLink,则可以使用描述符自定义器定义OneToNameMapping,并使用您需要的任何外键或联接条件。

    异常数据模型,您可能需要重新考虑它

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


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

    这是正确的,但框架为什么要放弃你去实现这种奇怪的情况真的很奇怪。当它是理想场景时,这一切都是好的,但每次都没有得到理想场景,几乎没有任何可以应用到数据模型的更改。我认为他们不支持这种荒谬的东西是好的。只是,如果他们要解决与其他层有关的每个特性,那么这将是过度设计的。这里有一个解决方法,当您的旧数据库实际上早于Hibernate,并且包含数以百万计的记录和在数十台服务器上运行了15年的旧业务逻辑时,您可以尝试告诉某人规范化他们的数据库不起作用,但框架为什么要放弃你去实现这种奇怪的情况真的很奇怪。当它是理想场景时,这一切都是好的,但每次都没有得到理想场景,几乎没有任何可以应用到数据模型的更改。我认为他们不支持这种荒谬的东西是好的。只是,如果他们要解决与其他层有关的每个特性,那么这将是过度设计的。这里有一个解决方法,当您的旧数据库实际上早于Hibernate,并且包含数百万条记录和在数十台服务器上运行了15年的旧业务逻辑时,您可以尝试告诉某人规范化他们的数据库不起作用。这是真的,但这是无法修改的,因为它来自某些外部应用程序,但这不是jpa frameworkits支持的适当功能,这是真的,但由于它来自某些外部应用程序,因此无法修改,但这不是jpa framework支持的适当功能