Tag: hibernate

避免对未获取的惰性对象进行Jackson序列化

我有一个简单的控制器,返回一个用户对象,这个用户有一个属性坐标具有hibernate属性FetchType.LAZY。 当我尝试获取这个用户时,我总是要加载所有的坐标来获取用户对象,否则当jackson尝试序列化用户时抛出exception: com.fasterxml.jackson.databind.JsonMappingException:无法初始化代理 – 没有会话 这是因为jackson试图抓取这个无法取得的物体。 这里是对象: public class User{ @OneToMany(fetch = FetchType.LAZY, mappedBy = "user") @JsonManagedReference("user-coordinate") private List<Coordinate> coordinates; } public class Coordinate { @ManyToOne @JoinColumn(name = "user_id", nullable = false) @JsonBackReference("user-coordinate") private User user; } 和控制器: @RequestMapping(value = "/user/{username}", method=RequestMethod.GET) public @ResponseBody User getUser(@PathVariable String username) { User user = userService.getUser(username); return user; […]

org.hibernate.LazyInitializationException – 无法初始化代理 – 没有会话

我得到以下例外: Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy – no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215) at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190) at sei.persistence.wf.entities.Element_$$_jvstc68_47.getNote(Element_$$_jvstc68_47.java) at JSON_to_XML.createBpmnRepresantation(JSON_to_XML.java:139) at JSON_to_XML.main(JSON_to_XML.java:84) 当我尝试从主要的以下几行呼叫: Model subProcessModel = getModelByModelGroup(1112); System.out.println(subProcessModel.getElement().getNote()); 我首先实现了getModelByModelGroup(int modelgroupid)方法: public static Model getModelByModelGroup(int modelGroupId, boolean openTransaction) { Session session = SessionFactoryHelper.getSessionFactory().getCurrentSession(); Transaction tx = null; if (openTransaction) tx = session.getTransaction(); String […]

使用额外列映射多对多关联表

我的数据库包含3个表:用户和服务实体具有多对多的关系,并与SERVICE_USER表连接如下: 用户 – SERVICE_USER – 服务 SERVICE_USER表包含额外的BLOCKED列。 执行这种映射的最佳方法是什么? 这些是我的实体类 @Entity @Table(name = "USERS") public class User implements java.io.Serializable { private String userid; private String email; @Id @Column(name = "USERID", unique = true, nullable = false,) public String getUserid() { return this.userid; } …. some get/set methods } @Entity @Table(name = "SERVICES") public class CmsService implements […]

JPA的hashCode()/ equals()两难

在这里有一些关于JPA实体的讨论 ,并且应该为JPA实体类使用hashCode() / equals()实现。 大多数(如果不是全部的话)依赖于Hibernate,但是我想讨论它们JPA-implementation-neutrally(顺便说一句,我使用的是EclipseLink)。 所有可能的实现都有自己的优点和缺点 : hashCode() / equals()合同一致性 (不变性) List / Set操作 是否可以检测到相同的对象(例如来自不同会话,来自懒惰加载的数据结构的dynamic代理) 实体是否以分离(或非持久)状态正确运行 据我所知,有三种select : 不要超越他们; 依靠Object.equals()和Object.hashCode() hashCode() / equals()工作 不能识别相同的对象,dynamic代理的问题 没有问题与分离的实体 根据主键覆盖它们 hashCode() / equals()被破坏 正确的身份(所有被pipe理的实体) 与分离的实体有关的问题 根据Business-Id (非主键字段;外键?)覆盖它们 hashCode() / equals()被破坏 正确的身份(所有被pipe理的实体) 没有问题与分离的实体 我的问题是: 我错过了一个选项和/或亲/点? 你select了什么选项,为什么? 更新1: 通过“ hashCode() / equals()被破坏”,我的意思是说,连续的hashCode()调用可能返回不同的值,这是(当正确实现的时候)不会在Object API文档的意义上被破坏,从Map , Set或其他基于散列的Collection检索已更改的实体。 因此,在某些情况下,JPA实现(至lessEclipseLink)将无法正常工作。 更新2: 谢谢你的回答 – 他们中的大多数都有非凡的品质。 不幸的是,我仍然不确定哪种方法对于实际应用程序是最好的,或者如何确定我的应用程序的最佳方法。 […]

javax.persistence.Table.indexes()中的NoSuchMethodError [Ljavax / persistence / Index

我有一个Play Framework应用程序,我正在使用Hibernate 4.2.5.Final(通过Maven依赖pipe理器检索)。 我决定升级到Hibernate 4.3.0.Final,成功重新编译我的应用程序,并运行它。 我得到了下面的例外,并没有能够找出原因。 我降级到4.2.5,这个问题没有发生。 然后,我尝试在4.2.5之后的每个最终版本上升级Hibernate。 也就是我从4.2.5.Final到4.2.6.Final,到4.2.7.Final,到4.2.8。最后到4.3,最后。 直到我升级到4.3.0.Final,问题不会发生。 Java版本信息 java version "1.7.0_45" Java(TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) 和例外 : play.api.UnexpectedException: Unexpected exception[NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;] at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:152) ~[play_2.10.jar:2.2.1] at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1] at scala.Option.map(Option.scala:145) ~[scala-library.jar:na] at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1] at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:110) ~[play_2.10.jar:2.2.1] at scala.util.Success.flatMap(Try.scala:200) ~[scala-library.jar:na] Caused by: […]

如何在Hibernate 4和Spring中使用注释来定义不同types的关系?

我有两个class级, Foo和Bar ,如下所示: public class Foo { private Long fooId; private Bar bar; //Yes, this doesn't actually make any sense, //having both a list and a single object here, its an example. private List<Bar> bars; } public class Bar { private Long barId; private Foo foo; } 如何使用这些类的Hibernate 4注释实现(单向/双向)一对多,多对一或多对多的关系? 另外,如何configuration我的一对多的孤儿删除,延迟加载和LazyInitialiaizationException处理集合时如何解决问题?

使用JPA / Hibernate计算属性

我的Java bean有一个childCount属性。 此属性未映射到数据库列 。 相反,它应该由数据库用在我的Java bean及其子节点上运行的COUNT()函数进行计算 。 如果这个属性可以按需求/“懒惰地”计算,那就更好了,但这不是强制性的。 在最坏的情况下,我可以用HQL或Criteria API来设置这个bean的属性,但是我不想这样做。 Hibernate @Formula注释可能有帮助,但我几乎找不到任何文档。 任何帮助不胜感激。 谢谢。

JPA和Hibernate有什么区别?

我知道JPA 2是一个规范,Hibernate是一个ORM的工具。 另外,我明白Hibernate比JPA 2有更多的function。但是从实际的angular度来看,真正的区别是什么? 我有使用iBatis的经验,现在我试图学习Hibernate或JPA2。 我拿起了专业JPA2书,它一直提到“JPA提供者”。 例如: 如果您认为某项function应该标准化,那么您应该向JPA提供商说出要求 这使我困惑,所以我有几个问题: 单独使用JPA2可以通过简单地注释我的POJO来从DB获取数据 JPA2是否应该与“JPA Provider”(例如TopLink或Hibernate)一起使用? 如果是这样的话,与单独使用Hibernate相比,使用JPA2 + Hibernate有什么好处? 你能推荐一本好实用的JPA2书吗? “Pro JPA2”看起来更像是一本关于JPA2的圣经和参考书(直到后半部分才进入查询)。 是否有一本书对JPA2采取问题/解决scheme?

为什么在视图中的Hibernate开放会议被认为是一个不好的做法?

你用什么样的替代策略来避免LazyLoadExceptions? 我明白,公开会议有问题: 分层的应用程序运行在不同的jvm中 事务只在最后被提交,而且很可能你会喜欢之前的结果。 但是,如果您知道您的应用程序正在单个虚拟机上运行,​​那么为什么不通过在视图策略中使用公开会话来缓解您的痛苦呢?

Java Persistence API中的FetchType LAZY和EAGER的区别?

我是Java持久性API和Hibernate的新手。 Java Persistence API中的FetchType.LAZY和FetchType.EAGER什么区别?