gpt4 book ai didi

java - 现有数据库表的 Hibernate-OneToMany 映射

转载 作者:行者123 更新时间:2023-12-02 10:21:33 27 4
gpt4 key购买 nike

我正在尝试加入一对一映射中的 Hibernate 实体。我能够从主实体中获取给定主键的数据,但是连接实体返回 null。我是 hibernate 新手,任何帮助将不胜感激。

我有两张表,

PT_CORE

  • 主键:ptId - 整数;
  • 外键:stId(ST_AUX) - 整数;
  • 列:ptId、ptName

ST_AUX

  • 主键:stId;
  • 列:stId、stName

这两个表由其他应用程序填充,而我的表是只读操作。

下面是我的第一个实体类(PtCore.java)

@Entity
@Table(name="PT_CORE")
public class PtCore implements Serializable{

@Id
@Column(name="ptId", nullable = false)
private int id;

@Column(nullable=false)
private int stId; //The Foreign key column

@OneToOne
@JoinTable( name = "core_aux", joinColumns = {@JoinColumn(Name="ptId")},
inverseJoinColumns = {@JoinColumn(Name="stId")}
)
private StAux staux;

//Getters, setters and toString() for above
}

StAux 是另一个实体,定义如下,

@Entity
@Table(name="ST_AUX")
public class StAux implements Serializable {

@Id
@Column(nullable=false)
private Integer stId;

@OneToOne
private PtCore ptcore;

@Column
private String stName;
//Getters, Setters and toString follow.
}

我在服务方法中执行以下操作:

PtCore obj = (PtCore) session.get(PtCore.class,1);
System.out.println(obj);

在结果中,我得到了 ptName 的值,但 stAux 类变量为 null,表明连接未按预期工作。

最佳答案

首先,您的 PT_CORE 中存在映射信息。我认为它类似于 FOREIGN KEY (stid) REFERENCES (stid)。如果您想使用现有架构和现有数据,我想没有真正存在的映射表core_aux。至少你没有提到。然而,它作为 @JoinTable 注释可见,但仍然存在上面提到的外键,它似乎是真正的映射(所以同样不是连接表)。

我建议如下

删除这个

@Column(nullable=false)
private int stId; //The Foreign key column

来自您的PtCore。我认为没有必要。同样在 PtCore 中,删除 @JoinTable (因为我上面所说的)并将映射信息添加到 @OneToOne 注释,例如:

@OneToOne
@JoinColumn(name = "stid")
private StAux staux;

来自您的PT_CORE

然后在 StAux 中也进行一些修改:

@Id
@Column(name = "stid") // this might not be needed but if there is like "st_id"...
private Integer stId; // so just for sure

@OneToOne(mappedBy = "staux")
private PtCore ptcore;

因为您有现有的表和约束,所以如果 hibernate 尝试通过 JPA 指令再次自动生成这些表和约束,可能会引发错误。

检查this for example了解更多信息。

更新:刚刚意识到您的标题中是@OneToMany,但您的代码中是@OneToOne

所以您可能想详细说明一下您的问题和/或标题。

关于java - 现有数据库表的 Hibernate-OneToMany 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54313605/

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