问题标签 [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.
jpa - 使用复合键连接实体
我有 2 个带有复合键的旧数据库实体,其中一个有一个带有@EmbeddedId
注释的复合键。
我应该如何定义@OneToOne
要加入的关系,如下例所示:
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 个
java - 休眠如何从列表中删除项目
我一直面临着理解如何在休眠中管理列表的一些挑战。
我看过以下帖子: 休眠从列表中删除项目不会持续存在,但这没有帮助。
所以这里是父母:
这是孩子
公共类 MaterialAttribute 扩展 MappedModel 实现 Serializable
因此,在我的服务类中,我正在执行以下操作:
因此,通过上述设置,第一次在数据库中正确创建了所有内容。第二次,我的期望是集合中的第一组项目将被删除,只有新项目会在数据库中。那没有发生。孩子中的原始项目与新项目一起存在,并且序列号再次从 0 开始。
另外,我看到以下错误
org.hibernate.HibernateException:拥有的实体实例不再引用具有 cascade="all-delete-orphan" 的集合:
我错过了什么。
hibernate - 对象名称“ACCOUNT_orders”无效?带有注释问题的 Spring-MVC Hibernate
我是休眠的新手。我在数据库中有订单和帐户表,
账户表:
我正在尝试一对多映射一个帐户有很多订单。我有以下课程:
订单类别:
但是当我尝试使用以下 HQL 访问 HibernateTemplate 的 List 方法时:
它给了我以下异常:
请帮帮我。提前致谢。
java - 使用 Hibernate 计算和存储预先计算的平均值
假设我有一组产品,每个产品都有一组评论。每条评论都有一个分数。我需要更多的平均分数,然后我需要实际的评论。是否有任何最佳实践/干净的方法来预先计算平均值并将其存储在休眠中。
我目前正在考虑将评论计数和评论总和列添加到产品表中,并操纵添加评论方法来更新计数和总和。
我很高兴听到一种更清洁的方式来做到这一点。
hibernate - 在 Hibernate 中禁用延迟加载
如何在 Hibernate 中禁用延迟加载?我使用的是持久性注释,而不是 hbm xml 文件。
我正在按 ID 获取单个对象并希望加载所有属性。会话在我使用对象之前关闭。
谢谢!
java - Hibernate - 我应该对非抽象类使用哪种继承策略,但子类可能不需要表
我的项目中有一个简单的继承关系,我想让超类是抽象的。一些继承类将需要额外的数据库信息,但其他类则不需要。我不确定要使用哪种继承策略。
我似乎无法找到一个直接的答案,即超类可以拥有一个带有 JOINED 策略的抽象类。
我怀疑子类的数量不会变得太大,而且它们都不应该有太多额外的数据,所以也许一个 SINGLE_TABLE 就足够了。
我真的不想无缘无故地有多余的表,所以 TABLE_PER_CLASS 是不合适的。
我会很感激任何指导。
谢谢
hibernate - Hibernate,Spring Web Service事务问题
我有两个应用程序。一个是 OrderService,另一个是 TradeService。在贸易服务中,有一种交易方法“购买”。
当 Trade Service 使用 Web Service 调用 Order 服务的 SubmitOrder 方法时会出现问题。
问题描述:
Buy 方法中的所有步骤都在一笔交易下。
当我们调用 buy 方法时,它会创建一个 Order 对象。
当此方法使用 Web 服务调用 Submit Order 方法时,它会传递订单 ID。
提交订单方法使用此 ID 从数据库加载订单对象。
但是在 Load 方法中它给出了延迟初始化异常:会话已关闭。(两个应用程序共享同一个数据库)
对此的可能解决方案是使 Submit Order 方法具有事务性。
它导致另一个死锁问题。
- 死锁的原因,A. Buy 方法锁定 Id 为“xyz”的订单对象。并发送相同的 ID 提交订单方法。B. 现在 Buy 方法正在等待提交订单的回复。C. Submit Order 方法无法加载 order 对象,因为它已经被 buy 方法锁定。D. 所以提交订单方法正在等待获取锁。因此它是死锁条件。
注意:这两个应用程序都使用 Spring MVC、Spring Web Service 和 Hibernate。
请帮助我摆脱这种情况。提前致谢。(如果需要,我可以发布部分代码)
hibernate - 如何为 sessionFactory.getCurrentSession() 启用休眠过滤器?
假设有一个具有结构的用户表:
用户
- 项目清单
- 用户 ID (PK)
- 公司(PK)
- 用户名
- 地址...等
而我只想检索当前公司的用户(用户可以通过UI更改公司,所以公司是运行时参数)
同样,还有许多其他表具有与公共列(公司)相似的结构,并且我想将数据限制为仅当前公司,因此我使用休眠过滤器来过滤数据。
休眠注释:
过滤器定义:
道:
如果我像这样更改 getSession;
然后我可以启用过滤器,一切看起来都不错,但是在获取会话期间没有启用过滤器,有没有更简单的替代方法可以为整个会话工厂/应用程序级别应用和启用过滤器?如果是这样,我怎么能使用弹簧配置来做到这一点?
我尝试连接到休眠拦截器(预加载事件侦听器),但我有点不确定这是否是正确的方法,还是我应该使用上面列出的 getSession 方法来启用过滤器?
java - hibernate @ManyToOne 无法正确插入,因为尚未创建 FK id
在 Order 类中,我有一个属性:
在 OrderLine 类中,我有一个属性:
在数据库中,orderline 只是有一个指向订单的 FK。这就是问题所在
我手动构建了一个没有 ID 的 Order 对象,因为它设置为自动生成,我使用适当的 DAO 保存它。订单表已正确填写,但订单表未正确填写。
订单行表中订单的 FK 字段留空。我认为这是因为在插入时订单 ID 仍然没有 ID。
有没有简单的方法来解决这个问题?