JPA/Hibernate/HSQLDB 查询但不分配子对象

Posted

技术标签:

【中文标题】JPA/Hibernate/HSQLDB 查询但不分配子对象【英文标题】:JPA/Hibernate/HSQLDB querying but not assigning sub-object 【发布时间】:2012-03-02 16:29:27 【问题描述】:

我在使用这个查询时遇到了问题,但仅限于 HSQLDB 下。我们将 Oracle 用于生产数据库,将 HSQL 用于自动化集成测试。这是我的主要目标:

@Entity
@Table(name="STUDENTS")
@org.hibernate.annotations.Proxy(lazy=false)
public class Student implements Serializable 
...
   @OneToMany(fetch=FetchType.LAZY)
   @JoinColumn(name="STUDENTID",referencedColumnName="ID")
   private Set<StudentRace> races;
...

StudentRace 看起来像这样:

@Entity
@Table(name="STUDENTRACE")
@org.hibernate.annotations.Proxy(lazy=false)
public class StudentRace implements Serializable 
...
    @Column(name="STUDENTID")
    private Integer studentid;
...

而我的 JPA 查询是这样的:

entityManager.createQuery("select distinct s from Student s left join fetch s.races "+
  "where s.schoolNumber = :schoolNumber");

我知道我在 HSQLDB 数据库中有正确的数据 - 我可以手动进行查询并查看数据。然而,学生对象总是将“种族”设为空。正如我所说,这个查询在 Oracle 中运行良好。我缺少某种 HSQLDB 设置吗?

编辑:像这样?在学生中:

@OneToMany(fetch=FetchType.LAZY, mappedBy="id")
private Set<StudentRace> races;

在学生竞赛中:

@ManyToOne
@JoinColumn(name="STUDENTID")
private Student student;

仍然没有运气。 “races”元素仍然为空。

【问题讨论】:

【参考方案1】:

您的映射不正确,因为STUDENTRACE.STUDENTID 列被映射了两次:一次作为Student 中的JoinColumn,一次作为StudentRace 中的列。

要么使关联单向并删除StudentRace 中的studentid 字段,要么使其成为双向,并在StudentRace 中具有Student student 字段,映射为ManyToOne,如this example from the Hibernate documentation 所示。

【讨论】:

以上是关于JPA/Hibernate/HSQLDB 查询但不分配子对象的主要内容,如果未能解决你的问题,请参考以下文章

JPA + Hibernate,避免丢表

codeigniter 活动记录,生成,但不执行查询

查询在 SQL Server 上运行,但不使用 PHP

使用 NSDate 的 FMDB 查询执行但不生效

为 jdbc 构建查询但不执行(或其他解决方案以查看后参数替换查询)

使用 foreach 循环的简单查询不起作用,但不起作用