问题标签 [hibernate-annotations]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3911 浏览

jpa - 使用复合键连接实体

我有 2 个带有复合键的旧数据库实体,其中一个有一个带有@EmbeddedId注释的复合键。

我应该如何定义@OneToOne要加入的关系,如下例所示:

0 投票
2 回答
17704 浏览

java - Hibernate @Id @GeneratedValue 注释无法识别 DB2 数据库生成的增量 ID

使用 Hibernate 3 将第二条记录插入到 DB2 v9.x 中,其中一列具有由 DB2 生成的唯一主键列 Id 不适用于持久化我的 Hibernate 实体。

插入第一条记录可以正常工作,但是除非我手动递增并使用 setter 设置值,否则无法保留更多记录。我试过注释掉@GeneratedValue ....我使用正确吗?我不希望 Hibernate 自动递增 Id 列,我希望它使用 DB2 自身生成的递增 ID 来插入下一行。谢谢:)

这是我的代码:

在 DB2 create table 脚本中添加的约束以生成 Id:

这是一个例外:

休眠:插入到 RPS.TMRT(MRT_APRNUM、MRT_CHKLOC、MRT_DPTCDE、MRT_FUNCDE、MRT_MDCNUM、MRT_MDCRSLCDE、MRT_MDCRSLDTE、MRT_OCCCDE、MRT_QIDNO、MRT_REGDTE、MRT_REMARK、MRT_SECCDE、MRT_SMP、MRT_USRID、MRT_VISNUM、MRT_APLYER、MRT 值) ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 15-Mar-2011 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions警告:SQL 错误:-803,SQLState:23505 2011 年 3 月 15 日 17:37:44 org.hibernate.util.JDBCExceptionReporter logExceptions 严重:DB2 SQL 错误:SQLCODE:-803,SQLSTATE:23505,SQLERRMC:1;RPS。 TMRT 2011 年 3 月 15 日 17:37:44 org.hibernate.event.def.AbstractFlushingEventListener performExecutions 严重:无法将数据库状态与会话 org.hibernate.exception.ConstraintViolationException 同步:无法插入:[qa.gov.moi.rps .db.实体。Medical_MRT] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister .java:2272) 在 org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60) 在 org.hibernate.engine.ActionQueue 的 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2665)。在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) 在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) 在 org.hibernate.event.def 执行(ActionQueue.java:279) .AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) 在 org.hibernate。event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) at org .hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) 在 org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54) 在 qa.gov.moi.rps.db.helper.MedicalHelper.create(MedicalHelper .java:74) 在 qa.gov.moi.rps.db.helper.MedicalHelper.main(MedicalHelper.java:285) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl .java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597) 在 com。intellij.rt.execution.application.AppMain.main(AppMain.java:115) 引起:com.ibm.db2.jcc.c.SqlException: DB2 SQL 错误:SQLCODE: -803, SQLSTATE: 23505, SQLERRMC: 1; RPS.TMRT 在 com.ibm.db2.jcc.c.fg.d(fg.java:1340) 在 com.ibm.db2.jcc.b.gb.k(gb.java:351) 在 com.ibm。 db2.jcc.b.gb.a(gb.java:60) 在 com.ibm.db2.jcc.bwa(w.java:52) 在 com.ibm.db2.jcc.b.wb.c(wb. java:213) 在 com.ibm.db2.jcc.c.gg.ab(gg.java:1779) 在 com.ibm.db2.jcc.c.gg.d(gg.java:2324) 在 com.ibm .db2.jcc.c.gg.W(gg.java:457) 在 com.ibm.db2.jcc.c.gg.executeUpdate(gg.java:440) 在 org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher .java:23) 在 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2252) ... 还有 18 个 javax.persistence.RollbackException:在 qa.gov 的 qa.gov.moi.rps.db.helper.MedicalHelper.create(MedicalHelper.java:74) 的 org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71) 提交事务时出错。 moi.rps.db.helper.MedicalHelper.main(MedicalHelper.java:285) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect。 DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115) :org.hibernate.exception.ConstraintViolationException:无法插入:[qa.gov.moi.rps.db.entity.Medical_MRT] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) 在 org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 在 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2272) 在 org.hibernate.persister.entity.AbstractEntityPersister .insert(AbstractEntityPersister.java:2665) 在 org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60) 在 org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) 在 org.hibernate.engine。 ActionQueue.executeActions(ActionQueue.java:263) 在 org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) 在 org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) 在 org.hibernate .event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)在 org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000) 在 org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338) 在 org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java :106) at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54) ... 7 更多原因:com.ibm.db2.jcc.c.SqlException:DB2 SQL 错误:SQLCODE:-803,SQLSTATE : 23505, SQLERRMC: 1;RPS.TMRT 在 com.ibm.db2.jcc.c.fg.d(fg.java:1340) 在 com.ibm.db2.jcc.b.gb.k(gb.java: 351) 在 com.ibm.db2.jcc.b.gb.a(gb.java:60) 在 com.ibm.db2.jcc.bwa(w.java:52) 在 com.ibm.db2.jcc.b .wb.c(wb.java:213) 在 com.ibm.db2.jcc.c.gg.ab(gg.java:1779) 在 com.ibm.db2.jcc.c.gg.d(gg.java :2324) 在 com.ibm.db2.jcc.c.gg.W(gg.java:457) 在 com.ibm.db2.jcc.c.gg.executeUpdate(gg.java:440) 在 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2252) 的 org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23) ... 还有 18 个

0 投票
1 回答
6724 浏览

java - 休眠如何从列表中删除项目

我一直面临着理解如何在休眠中管理列表的一些挑战。

我看过以下帖子: 休眠从列表中删除项目不会持续存在,但这没有帮助。

所以这里是父母:

这是孩子

公共类 MaterialAttribute 扩展 MappedModel 实现 Serializable

因此,在我的服务类中,我正在执行以下操作:

因此,通过上述设置,第一次在数据库中正确创建了所有内容。第二次,我的期望是集合中的第一组项目将被删除,只有新项目会在数据库中。那没有发生。孩子中的原始项目与新项目一起存在,并且序列号再次从 0 开始。

另外,我看到以下错误

org.hibernate.HibernateException:拥有的实体实例不再引用具有 cascade="all-delete-orphan" 的集合:

我错过了什么。

0 投票
1 回答
1899 浏览

hibernate - 对象名称“ACCOUNT_orders”无效?带有注释问题的 Spring-MVC Hibernate

我是休眠的新手。我在数据库中有订单和帐户表,

账户表:

我正在尝试一对多映射一个帐户有很多订单。我有以下课程:

订单类别:

但是当我尝试使用以下 HQL 访问 HibernateTemplate 的 List 方法时:

它给了我以下异常:

请帮帮我。提前致谢。

0 投票
3 回答
2081 浏览

java - 使用 Hibernate 计算和存储预先计算的平均值

假设我有一组产品,每个产品都有一组评论。每条评论都有一个分数。我需要更多的平均分数,然后我需要实际的评论。是否有任何最佳实践/干净的方法来预先计算平均值并将其存储在休眠中。

我目前正在考虑将评论计数和评论总和列添加到产品表中,并操纵添加评论方法来更新计数和总和。

我很高兴听到一种更清洁的方式来做到这一点。

0 投票
4 回答
24683 浏览

hibernate - 在 Hibernate 中禁用延迟加载

如何在 Hibernate 中禁用延迟加载?我使用的是持久性注释,而不是 hbm xml 文件。

我正在按 ID 获取单个对象并希望加载所有属性。会话在我使用对象之前关闭。

谢谢!

0 投票
2 回答
560 浏览

java - Hibernate - 我应该对非抽象类使用哪种继承策略,但子类可能不需要表

我的项目中有一个简单的继承关系,我想让超类是抽象的。一些继承类将需要额外的数据库信息,但其他类则不需要。我不确定要使用哪种继承策略。

我似乎无法找到一个直接的答案,即超类可以拥有一个带有 JOINED 策略的抽象类。

我怀疑子类的数量不会变得太大,而且它们都不应该有太多额外的数据,所以也许一个 SINGLE_TABLE 就足够了。

我真的不想无缘无故地有多余的表,所以 TABLE_PER_CLASS 是不合适的。

我会很感激任何指导。

谢谢

0 投票
2 回答
1251 浏览

hibernate - Hibernate,Spring Web Service事务问题

我有两个应用程序。一个是 OrderService,另一个是 TradeService。在贸易服务中,有一种交易方法“购买”。

当 Trade Service 使用 Web Service 调用 Order 服务的 SubmitOrder 方法时会出现问题。

问题描述:

  1. Buy 方法中的所有步骤都在一笔交易下。

  2. 当我们调用 buy 方法时,它会创建一个 Order 对象。

  3. 当此方法使用 Web 服务调用 Submit Order 方法时,它会传递订单 ID。

  4. 提交订单方法使用此 ID 从数据库加载订单对象。

  5. 但是在 Load 方法中它给出了延迟初始化异常:会话已关闭。(两个应用程序共享同一个数据库)

  6. 对此的可能解决方案是使 Submit Order 方法具有事务性。

  7. 它导致另一个死锁问题。

    • 死锁的原因,A. Buy 方法锁定 Id 为“xyz”的订单对象。并发送相同的 ID 提交订单方法。B. 现在 Buy 方法正在等待提交订单的回复。C. Submit Order 方法无法加载 order 对象,因为它已经被 buy 方法锁定。D. 所以提交订单方法正在等待获取锁。因此它是死锁条件。

注意:这两个应用程序都使用 Spring MVC、Spring Web Service 和 Hibernate。

请帮助我摆脱这种情况。提前致谢。(如果需要,我可以发布部分代码)

0 投票
2 回答
24130 浏览

hibernate - 如何为 sessionFactory.getCurrentSession() 启用休眠过滤器?

假设有一个具有结构的用户表:

用户

  • 项目清单
  • 用户 ID (PK)
  • 公司(PK)
  • 用户名
  • 地址...等

而我只想检索当前公司的用户(用户可以通过UI更改公司,所以公司是运行时参数)

同样,还有许多其他表具有与公共列(公司)相似的结构,并且我想将数据限制为仅当前公司,因此我使用休眠过滤器来过滤数据。

休眠注释:

过滤器定义:

道:

如果我像这样更改 getSession;

然后我可以启用过滤器,一切看起来都不错,但是在获取会话期间没有启用过滤器,有没有更简单的替代方法可以为整个会话工厂/应用程序级别应用和启用过滤器?如果是这样,我怎么能使用弹簧配置来做到这一点?

我尝试连接到休眠拦截器(预加载事件侦听器),但我有点不确定这是否是正确的方法,还是我应该使用上面列出的 getSession 方法来启用过滤器?

0 投票
1 回答
1028 浏览

java - hibernate @ManyToOne 无法正确插入,因为尚未创建 FK id

在 Order 类中,我有一个属性:

p>

在 OrderLine 类中,我有一个属性:

p>

在数据库中,orderline 只是有一个指向订单的 FK。这就是问题所在

我手动构建了一个没有 ID 的 Order 对象,因为它设置为自动生成,我使用适当的 DAO 保存它。订单表已正确填写,但订单表未正确填写。

订单行表中订单的 FK 字段留空。我认为这是因为在插入时订单 ID 仍然没有 ID。

有没有简单的方法来解决这个问题?