Tag: hibernate

会话关闭后如何强制hibernate释放内存?

我们刚刚开始使用Hibernate并且仍然习惯它的工作方式。 在我们看到的事情上,即使在关闭所有会话并且引用超出范围之后,hibernate仍然似乎在其缓存中维护以前使用的数据库值。 我们的代码可以从多个过程中的一组表中读取。 因为所有的内存都非常谨慎地释放,后来的传递慢慢变成了爬行。 有没有办法强制Hibernate清除它的缓存? 显式调用System.gc()没有帮助。 (是的,我知道这是一个建议) 附加信息 :我们已明确禁用二级缓存。

谁负责MySQL和Hibernate之间主键的自动增量?

MySQL的 CREATE TABLE `role` ( `id_role` INT(11) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id_role`) ) AUTO_INCREMENT=1; 过冬 @Entity public class Role { private Integer idRole; @Column(name = “id_role”, precision = 10) @GeneratedValue @Id public Integer getIdRole() { return idRole; } public void setIdRole(Integer idRole) { this.idRole = idRole; } } 鉴于上述背景,谁在创建新role时负责id_role列的自动增量? 换句话说,Hibernate在运行create SQL语句之前是否设置了主键值,还是将其设置为null并让MySQL在获取所选主键时自动递增该字段?

Hibernate加载一个懒惰的代理,但我只需要PK

我有这些实体: @Entity public class Room { @ManyToOne(optional=true,fetch=FetchType.LAZY) private Player player1; … } @Entity public class Player { @Id @Column(updatable=false) private long id; public long getId() { return id; } … } 现在,这个声明在Room … player1.getId(); …将导致从数据库中获取整个Player实体。 但是,我只需要它的主键id ,它应该已经拥有(否则它如何获取数据?)。 如何在不触发数据库访问的情况下访问惰性Player代理的id ?

Spring 4.3.0.RELEASE + Hibernate 5.2.0.Final + JPA Repository

尝试使用Spring JPA时出现此错误: 无法打开JPA EntityManager进行交易; 嵌套exception是java.lang.NoSuchMethodError:org.hibernate.Session.getFlushMode()Lorg / hibernate / FlushMode; **更新:完整堆栈跟踪 它在不同的项目中使用相同的配置 可能是什么原因? 我正在使用Java 1.8和动态Web应用程序3.1(作为可行的并行项目) pom.xml中: 4.0.0 Test Test 0.0.1-SNAPSHOT war src org.apache.maven.plugins maven-compiler-plugin 3.5.1 1.8 1.8 -Xlint:all true true WebContent\WEB-INF\web.xml false org.codehaus.mojo exec-maven-plugin 1.2.1 org.test.int1.Main org.springframework spring-context 4.3.0.RELEASE commons-logging commons-logging org.springframework spring-webmvc 4.3.0.RELEASE org.springframework spring-tx 4.3.0.RELEASE org.springframework spring-web 4.3.0.RELEASE org.springframework.data spring-data-jpa 1.10.2.RELEASE org.springframework.security spring-security-config 4.1.0.RELEASE […]

Hibernate返回整数值

我是hibernate的新手。 我想传递2列值,并希望hibernate返回该表的主键。 String queryString = “select perId from Permission where document.docId=1 and user.id=2”; return getHibernateTemplate().find(queryString); 但是这个方法返回List。 我怎样才能返回int值。

Hibernate Annotations上的Assigned Generator类

这里有Hibernate新手。 我正在研究一个简单的Hibernate映射文件。 当我使用xml方法时,我将生成器类设置为已分配。 在分配员工ID之前必须检查某些逻辑,因此我无法自动生成它。 但是我也正在研究注释类型和注释似乎是现在的事情,因为框架正在逐渐远离配置文件。 但我找不到任何生成类型来匹配指定的值 public class Employee{ String id; @column(name=”emp_id”, unique=true) public String getID(){ return id; } } 这是否意味着我在分配时不需要添加任何序列生成器注释? 谢谢

如何避免创建多余的实体?

在我当前的项目中,我需要执行一些本机查询,从查询中加入的表中选择一些字段,例如: SELECT t1.col1, t2.col5 FROM t1 JOIN t2 ON t2.id = t1.t2_id 我试着将它们存放在类似的类中 class Result { String t1_col1; String t2_col5; } 运用 Query q = entityManager.createNativeQuery( “THE SQL SELECT” , Result.class ); JPA现在抱怨(“未知实体:结果”)类“结果”不是可能需要将列映射到对象的实体。 我还尝试在结果类中重复@Column声明。 我的问题是如何声明这一点而不必在我的数据库中创建表示为表格的entites?

如何在Hibernate Interceptor中获取Hibernate会话?

如何在Hibernate Interceptor中获取Hibernate会话? 我正在尝试使用Hibernate透明地通过组织ID强制执行数据访问。 我已经设置了一个全局filter来按组织ID过滤所有查询。 现在,我需要使用Entity拦截器在Save / Update之前在所有实体上设置Organizational Id。 组织ID来自HttpSession 我在Hibernate会话中将Organizational Id设置为Filter属性,我希望在拦截器中检索它并用于所有Inserts和Updates。 问题是我似乎无法访问拦截器内的Session。 这有什么变通方法吗?

Hibernate返回带有空值的列表(带有List类型的OneToMany注释)

我遇到一个问题,因为Hibernate(4.1.8.FINAL)返回一个包含NULL值的列表(单向OneToMany映射)。 我得到的是:我得到一个大小为21的List,其中EntryAddress在第10个索引上,第二个Entry Address在第20个索引上。 Entry [addresses=[null, null, null, null, null, null, null, null, null, null, EntryAddress [id=5, entryId=3, precedence=10, line=Line 3.1], null, null, null, null, null, null, null, null, null, EntryAddress [id=6, entryId=3, precedence=20, line=Line 3.2]]] 我所期待的 – 我希望List只有两个EntryAddress对象: Entry [addresses=[EntryAddress [id=5, entryId=3, precedence=10, line=Line 3.1], EntryAddress [id=6, entryId=3, precedence=20, line=Line 3.2]]] 这是最小的源代码: @Entity @Table(name = […]

在数据库模式中hibernate二级缓存和ON DELETE CASCADE

我们的Java应用程序有大约100个映射到数据库(SQL Server或MySQL)的类。 我们使用Hibernate作为我们的ORM(使用XML映射文件)。 我们在数据库模式中指定FOREIGN KEY约束。 我们的大多数FOREIGN KEY约束也指定了ON DELETE CASCADE 。 我们最近开始启用Hibernate二级缓存(针对流行实体和集合)以缓解一些性能问题。 自从我们启用了二级缓存以来,性能得到了提升。 但是我们也开始遇到ObjectNotFoundExceptions。 似乎发生了ObjectNotFoundExceptions,因为数据库正在删除Hibernate 下面的表行。 例如,当我们删除具有Hibernate的Parent时,数据库模式将ON DELETE CASCADE到任何子实体。 这显然没有Hibernates知识,所以它没有机会更新二级缓存(并删除任何已删除的子实体)。 我们相信这个问题的解决方案是从我们的数据库模式中删除ON DELETE CASCADE (但保留FOREIGN KEY )。 相反,我们需要配置Hibernate以使用普通删除SQL删除Child依赖项,这也将使Hibernate更新二级缓存。 一些有限的测试表明这种方法似乎有效。 我想得到一些社区反馈。 我们的问题是否有其他(更好的?)解决方案? 其他人如何处理这种情况? 通常,在使用Hibernate的数据库模式中使用ON DELETE CASCADE时应该考虑哪些权衡? 谢谢。