【发布时间】:2012-09-01 10:20:57
【问题描述】:
我有两个数据库表,并希望使用 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;
我做错了吗?还是我错过了一些非常基本的东西,我的理解是这应该有效......
非常感谢任何想法或建议!再次提前感谢!
【问题讨论】:
-
盯着这个看什么都不会跳出来...应该帮助的是跟踪/记录生成的(由 Hibernate)SQL。
-
您使用的是什么数据库平台?通常,您可以使用数据库诊断工具(即 MySQL Query Log 或 MS SQL Server Profiler)来查看 Hibernate 在幕后所做的事情......
-
我将日志记录级别设置为跟踪,但还没有看到任何明显的东西......
-
我启用了日志记录,在查看了 mysql 日志以及 hibernate 在“幕后”所做的事情之后,我似乎仍然无法找到问题......,当我添加
@JoinColumn(name = "PRAXISCODE")它不再抛出错误,而是根本没有得到 PraxisIITest(调试时它在 mysql select 语句之后为空)
标签: java spring hibernate jakarta-ee hibernate-mapping