gpt4 book ai didi

java - Hibernate 从onetomany 中检索列表

转载 作者:行者123 更新时间:2023-12-04 18:21:04 25 4
gpt4 key购买 nike

我设法(正如您在我的旧帖子中看到的那样)通过 hibernate 插入一个单对多关系。我的两个实体类如下所示:

项目.java:

@Entity
public class Project {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@OneToMany(cascade = CascadeType.ALL, mappedBy="project")
@OrderColumn(name = "project_index")
List<Application> applications;
....

Application.java(是project的child,一个project可以有多个application,但是一个application只能属于一个project)

@Entity
public class Application {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "project_id")
private Project project;
...

到目前为止,数据插入效果很好。但是从我的数据库中获取数据是个问题。我尝试了两种方法:


方式 1: 我检索一个项目并尝试从列表属性中获取应用程序。但不幸的是,应用程序实体位于“storedSnapshot”中,这对我来说似乎是错误的。这是我的调试屏幕的屏幕截图:

alt text

实际上这种方法很管用!我在其他地方犯了一些错误...


方式 2:我尝试通过 sql 查询检索所有应用程序的列表:

public List<Application> getApplications(int project_id) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
List<Application> applications = session.createQuery("from Application a where a.project_id=" + project_id + " ").list();
return applications;
}

..这会抛出奇怪的异常-.-

org.hibernate.QueryException:无法解析属性:project_id of:de..common.entities.Application [from de..common.entities.Application a where a.project_id=1]

方式 2 的问题是我混淆了 SQL 和 HQL。


对 hibernate 初学者有一点帮助会很棒 :-)干杯..

最佳答案

您应该能够通过简单地访问应用程序:

List<Application> applications = project.getApplications();

PersistentBag 正在实现 java.util.List,因此您不应该关心它的内部结构。

您只需要一个打开的 session 即可执行此操作,否则将抛出 LazyInitializationException

关于java - Hibernate 从onetomany 中检索列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3667257/

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