gpt4 book ai didi

java - 如何通过针对父实体类的 OneToOne 映射来避免 NullPointerException?

转载 作者:行者123 更新时间:2023-12-01 05:05:54 25 4
gpt4 key购买 nike

我搜索过并发现了类似的问题,但它们似乎与问题不太相同

我有一些像这样映射的实体:

Person
|
+--User

我想添加一个新实体 PersonPartDeux,其 OneToOne 映射到 Person。生成的映射应如下所示:

Person + PersonPartDeux
|
+--User

当我这样做时,尝试加载映射时会抛出NullPointerException:

java.lang.NullPointerException
at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:135)

如何指定映射以避免此异常?

这是我的代码:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Person implements Serializable
{
@Id
@GeneratedValue
public Long id;

@Version
public int version = 0;

public String name;

@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public PersonPartDeux personPartDeux;
}

@Entity
public class PersonPartDeux implements Serializable
{
@Id
@GeneratedValue(generator = "person-primarykey")
@GenericGenerator(
name = "person-primarykey",
strategy = "foreign",
parameters = @Parameter(name = "property", value = "person")
)
public Long id = null;

@Version
public int version = 0;

@OneToOne(optional=false, mappedBy="person")
public Person person;

public String someText;
}

@Entity
@PrimaryKeyJoinColumn(name = "person_Id")
public class User extends Person
{
public String username;
public String password;
}

至于为什么我这么烦恼,我需要继承和 OneToOne 映射来解决我的应用程序中的不同已知问题。

最佳答案

将 Hibernate 源附加到您的项目,以便您可以单击“打开类型”(在 Eclipse 中为 Ctrl-Shift-T)来查看 OneToOneSecondPass 源。

查看来源,可以清楚地表明需要指定的内容。

在我的源代码(Hibernate 4.1.7)中,第 135 行是

propertyHolder.addProperty( prop, inferredData.getDeclaringClass() );

但是您可能使用的是早期版本。

查看映射,我对 @OneToOne 定义 --mappedBy="person"表示怀疑。

@OneToOne(optional=false, mappedBy="person")
public Person person;

单独映射关联属性有什么用处? Hibernate 已经知道该属性是 OneToOne —— 你刚刚告诉它了。

指向属性的基础映射/FK 本身..可能实际上并没有告诉 Hibernate 任何正确或有用的信息。

这是 HB dosc 中的一个示例,也许可以更好地展示如何执行您想要的操作:

@Entity
class MedicalHistory implements Serializable {
@Id Integer id;

@MapsId @OneToOne
@JoinColumn(name = "patient_id")
Person patient;
}

@Entity
class Person {
@Id @GeneratedValue Integer id;
}

来源:http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/(JBoss 站点上有 3.5 个文档。)

干杯,希望这有帮助。

关于java - 如何通过针对父实体类的 OneToOne 映射来避免 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com