3

我有两个数据库表,想使用 Hibernate 在两者之间建立多对一关系。

在此处输入图像描述

和

我没有构建这两个表,但在我开始项目时已经制作好了。我是 Hibernate 的新手,想在两个表之间建立多对一关系。

这通常会很困难,但是两个表之间的链接,“Praxiscode”不是主键,我想做类似的事情

@ManyToOne(targetEntity = PraxisIITest.class)
    @Fetch(FetchMode.JOIN)
    @NotFound(action = NotFoundAction.IGNORE)
    @Formula(value = "(SELECT praxis.ID FROM lstPraxis praxis where praxis.Praxiscode=Praxiscode and Testdate BETWEEN praxis.BeginDate AND praxis.EndDate)")
    private PraxisIITest praxisIITest;

但是在指定上述@Formula 时,它会引发异常,抱怨列不在“字段列表”中

org.hibernate.exception.SQLGrammarException: Unknown column 'praxisiite1_.praxisIITest_ID' in 'field list'
    org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)

这是在 PraxisIITest 中指定 ID 的地方 ->

@Entity
@Table(name="lstPraxis")
@Cache(region="edu.uky.cepis.cache.praxisIItest", usage=CacheConcurrencyStrategy.READ_WRITE)
public class PraxisIITest implements java.util.Comparator<PraxisIITest>, Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="ID")
    private long id;

我对这一切都错了吗?还是我错过了一些非常基本的东西,我的理解是这应该有效......

非常感谢任何想法或建议!再次提前感谢!

4

1 回答 1

0

我认为问题在于您没有使用有效的 SQL 片段。它假设 Hibernate 会做一些别名:

(SELECT praxis.ID FROM lstPraxis praxis where praxis.Praxiscode=Praxiscode and Testdate BETWEEN praxis.BeginDate AND praxis.EndDate)

lstPraxis 表中不存在 Testdate(根据您的图像),它在 tbl20Praxis 表中。即使该表是 PraxisIITest 实体映射到的表,我认为您需要在 @Formula 片段中显式地进行表连接。

我认为 Hibernate 没有对公式进行任何处理,而是将其视为原生 SQL。但这会使您看到的错误更加令人困惑...

于 2012-09-07T16:17:44.257 回答