Sve*_*ven 2 java orm hibernate hql
我设法(正如你在我的旧帖子中看到的那样)通过休眠插入了一个 onetomany 关系。我的两个实体类如下所示:
项目.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;
....
Run Code Online (Sandbox Code Playgroud)
Application.java(项目的子项目。一个项目可以有多个应用程序,但一个应用程序只属于一个项目)
@Entity
public class Application {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name = "project_id")
private Project project;
...
Run Code Online (Sandbox Code Playgroud)
到目前为止,插入数据效果很好。但是从我的数据库中获取数据是问题所在。我尝试了两种方法:
方式 1:我检索一个项目并尝试从列表属性中获取应用程序。但不幸的是,应用程序实体位于“存储快照”中,这对我来说似乎很错误。这是我的调试屏幕的屏幕截图:

其实这种方法有效!我在其他地方犯了一些错误......
方式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;
}
Run Code Online (Sandbox Code Playgroud)
..抛出奇怪的异常-.-
org.hibernate.QueryException: 无法解析属性:project_id of: de..common.entities.Application [from de..common.entities.Application a where a.project_id=1 ]
方法 2 的问题是我混淆了 SQL 和 HQL。
对休眠初学者的一点帮助会很棒:-)干杯..
您应该能够通过简单的方式访问应用程序:
List<Application> applications = project.getApplications();
Run Code Online (Sandbox Code Playgroud)
PersistentBag正在实施,java.util.List所以你不应该关心它的内部。
你只需要一个开放的会话来做到这一点,否则LazyInitializationException将被抛出。
| 归档时间: |
|
| 查看次数: |
7441 次 |
| 最近记录: |