Tag: jpa

Entitymanager.flush()VS EntityManager.getTransaction()。commit – 我应该select什么?

更新数据库时应该如何select? 两种方法的优缺点是什么?何时使用这两种方法? public void disemployEmployee(Integer employeeId, Date endDate) { Employee employee = (Employee)em.find("Employee", employeeId); employee.getPeriod().setEndDate(endDate); em.flush(); } public void disemployEmployee(Integer employeeId, Date endDate) { Employee employee = (Employee)em.find("Employee", employeeId); em.getTransaction().begin(); employee.getPeriod().setEndDate(endDate); em.getTransaction().commit(); }

在JPA中禁用caching(eclipselink)

我想使用JPA(eclipselink)从我的数据库中获取数据。 数据库被其他许多来源所改变,因此我想回到执行的每个查找的数据库。 我已经阅读了许多关于禁用caching的post,但这似乎并没有工作。 有任何想法吗? 我试图执行下面的代码: EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("default"); EntityManager em = entityManagerFactory.createEntityManager(); MyLocation one = em.createNamedQuery("MyLocation.findMyLoc").getResultList().get(0); MyLocation two = em.createNamedQuery("MyLocation.findMyLoc").getResultList().get(0); System.out.println(one==two); 一个==两个是真的,而我希望它是假的。 我已经尝试添加每个/所有以下到我的persistence.xml <property name="eclipselink.cache.shared.default" value="false"/> <property name="eclipselink.cache.size.default" value="0"/> <property name="eclipselink.cache.type.default" value="None"/> 我也尝试添加@Cache注释到实体本身: @Cache( type=CacheType.NONE, // Cache nothing expiry=0, alwaysRefresh=true ) 我误解了什么?

在多列上创build组合唯一约束

这是我的模特: class User {…} class Book { User author; int number; } 每个作者的书号从1开始,然后递增。 所以我们会有John Grisham的书1,2,3,George Martin的Book 1..5等。 有没有一个独特的限制,我可以放在Book ,这将保证我们没有两个相同的作者相同数量的书籍? 类似于@Column(unique = true) ,但是这个约束只适用于Author X number的组合?

如何指定被通配符包围的JPA命名参数?

我将如何指定一个JPA查询,如: Query q = em.createQuery( "SELECT x FROM org.SomeTable x WHERE x.someString LIKE '%:someSymbol%'" ); 其次是: q.setParameter("someSymbol", "someSubstring"); 而不是触发一个 org.hibernate.QueryParameterException: could not locate named parameter [id] 非常感激!

如何在Spring数据中使用@Transactional?

我刚刚开始研究Spring-data,Hibernate,MySQL和JPA项目。 我切换到spring-data,这样我就不用担心手工创build查询。 我注意到,当使用spring-data时,不需要使用@Transactional,因为我也尝试了没有注解的查询。 是否有一个特定的原因,我应该/不应该使用@Repository注释? 作品: @Transactional public List listStudentsBySchool(long id) { return repository.findByClasses_School_Id(id); } 也适用于: public List listStudentsBySchool(long id) { return repository.findByClasses_School_Id(id); } 提前致谢!

不成功:在Hibernate / JPA / HSQLDB独立版本中使用alter table XXX drop constraint YYY

我正在尝试使用内存中的HSQL DB运行一些Hibernate / JPA示例。 我得到的错误信息如下: 13:54:21,427 ERROR SchemaExport:425 – HHH000389: Unsuccessful: alter table ReferringItem_map drop constraint FK5D4A98E0361647B8 13:54:21,427 ERROR SchemaExport:426 – user lacks privilege or object not found: PUBLIC.REFERRINGITEM_MAP 13:54:21,427 ERROR SchemaExport:425 – HHH000389: Unsuccessful: alter table ReferringItem_myCollection drop constraint FK75BA3266361647B8 13:54:21,427 ERROR SchemaExport:426 – user lacks privilege or object not found: PUBLIC.REFERRINGITEM_MYCOLLECTION 13:54:21,428 ERROR […]

Spring数据jpa-没有定义名为“entityManagerFactory”的bean; 注入自动装载的依赖关系失败

我正在开发应用程序使用spring的数据jpa,hibernate,mysql,tomcat7,maven和它的创build错误。我试图弄清楚,但我失败了。 错误是在设置构造函数参数的时候无法parsingbean的'entityManagerFactory'引用; 没有定义名为“entityManagerFactory”的bean; 注入自动装载的依赖关系失败 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initDbService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.wahid.cse.repository.RoleRepository org.wahid.cse.service.InitDbService.roleRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'roleRepository': Cannot create inner bean '(inner bean)#c08f81' of type [org.springframework.orm.jpa.SharedEntityManagerCreator] while setting bean property 'entityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: […]

与MySql的连接正在自动中止。 如何正确configurationConnector / J?

我从错误信息中读到这个build议: 在应用程序中使用之前,应考虑使用过期和/或testing连接有效性,增加服务器configuration的客户端超时值,或者使用Connector / J连接属性“autoReconnect = true”来避免此问题。 我使用Spring和JPA。 我应该在哪里configurationConnector / J? (在persistence.xml ,或在entityManagerFactory弹簧configuration,或在dateSource弹簧configuration,或其他地方?)

如何testing延迟加载的JPA集合是否被初始化?

我有一个从外部代码获取JPA实体的服务。 在这个服务中,我想遍历一个延迟加载的集合,它是这个实体的一个属性,以查看客户端是否在数据库中添加了一些相对于当前版本的东西。 但是,客户可能从来没有碰过这个集合,所以它还没有被初始化。 这导致众所周知的 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.example.SomeEntity. 当然,如果客户从未触摸收集,我的服务不必检查可能的更改。 问题是,我似乎无法find一种方法来testing集合是否被初始化。 我想我可以调用size() ,如果它抛出LazyInitializationException我会知道,但我试图不依赖于这种模式。 有什么isInitialized()方法吗?

我发现JPA,或类似的,不鼓励DAO模式

我发现JPA,或类似的,不鼓励DAO模式。 我不知道,但我觉得这样,尤其是服务器pipe理的JTA经理。 经过充分的动手使用DAO模式,我开始围绕这种模式devise基于JPA的应用程序。 但它不适合,国际海事组织。 我倾向于失去相当JPA和所有function。 那么,假设你用一个悲观的locking激发了一个查询,并且从DAO方法返回了一个entite列表。 返回时,事务结束并locking消失(服务器pipe理的JTApipe理器的情况)。 所以,没有意义,松散地说。 但是有一些有效的例子。 另一个例子是更微不足道的。 假设你启动了一个查询来获得一个实体,它与其他实体有一个延迟的加载一对多的关联。 在返回DAO方法后,事务结束。 延迟加载不会工作了,你只是得到null或什么的。 为了应付这个问题,我们手工加载它。 我们做一些像a.getBList().size() 。 因此,IMO最好不要专门制作一个DAO,并且在你的商业bean中这样做,这样你就可以利用这些有用的特性。 或者ORM API可以被认为是一个DAO /数据层本身。 所以,我们不需要再做一个。 你们都在想什么? 注:我绝对不会说DAO模式已经过时。 事实上,这取决于情况。