Tag: jpa

JPA Select Count Distinct

我需要一个相对简单的查询,但JPA很难创建它。 SQL变体看起来像这样: SELECT COUNT(DISTINCT OrderID) AS DistinctOrders FROM Orders WHERE CustomerID=7; [编辑:OrderID不是主键。 可以有更多的OrderId在表中等于] 我需要使用传递给my方法的变量设置CustomerID 。 我在CriteriaQuery distinct()上找到了文档,但我似乎无法将它们全部包装在一起。 这是我到目前为止: CriteriaBuilder cb = this.em.getCriteriaBuilder(); CriteriaQuery c = cb.createQuery( Order.class ); Root order = c.from( Order.class ); Path customerID = order.get( “customerID” ); c.where( cb.equal( customerID, theId ) );

Hibernate QueryTranslatorImpl HQL AST解析性能

我正面临使用@NamedEntityGraph执行标准spring-data-jpa findAll查询的性能问题 当我检查日志时,我看到以下语句: 2016-10-26 09:46:25,681 DEBUG [http-nio-8080-exec-1] CriteriaQueryImpl: Rendered criteria query -> select generatedAlias0 from Patient as generatedAlias0 order by generatedAlias0.id asc 2016-10-26 09:46:25,681 DEBUG [http-nio-8080-exec-1] CriteriaQueryImpl: Rendered criteria query -> select count(generatedAlias0) from Patient as generatedAlias0 2016-10-26 09:46:25,681 DEBUG [http-nio-8080-exec-1] SQL: select count(patient0_.id) as col_0_0_ from patient patient0_ 2016-10-26 09:46:25,682 DEBUG [http-nio-8080-exec-1] Loader: Result […]

什么是持久性对象?

我正在阅读Java EE教程, 在这里我在开头看到这句话: 实体是轻量级持久性域对象。 我搜索了持久性对象但无法找到明确的解释。 什么是持久域对象 ?

如何通过JPA将Oracle Date字段正确转换为java.util.Date?

我在db表中有一个Oracle Date列,并通过以下方式获取此字段: EntityManagerFactory emf = Persistence.createEntityManagerFactory(“dbPU”); EntityManager em = emf.createEntityManager(); DateFormat dateFormat = new SimpleDateFormat(“dd.MM.yyyy, HH:mm”); String query = “SELECT T.MDATE FROM MTABLE T”; List resultList = em.createNativeQuery(query).getResultList(); for (Object[] data : resultList) { System.out.println(dateFormat.format((java.util.Date) data[0])); } 打印日期的“日期”部分是正确的,但所有这些部分的“时间”(即小时和秒)部分都是“00:00”。 但是,当我在SQL Developer中检查此字段时,实际的“时间”部分与“00:00”不同。 哪里有问题? 提前致谢。 编辑:我正在使用, Hibernate-Version: 3.2.5.ga hibernate.dialect = org.hibernate.dialect.Oracle10gDialect Oracle JDBC Driver version 10.2.0.1.0 Oracle Database […]

使用Spring CrudRepository的Hibernate LazyInitializationException

我总是得到例外: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.knapp.vk.domain.Business.businessCategorySet, could not initialize proxy – no Session 我不想把fetch设置为渴望。 什么是其他好的解决方案? 商业实体类: @Entity public class Business { @Id @GeneratedValue private int pk; @ManyToMany private Set businessCategorySet = new HashSet(); … } BusinessRepository接口: import org.springframework.data.repository.CrudRepository; import org.springframework.transaction.annotation.Transactional; @Transactional public interface BusinessRepository extends CrudRepository { } 配置: import […]

应用程序缓存vs hibernate二级缓存,使用哪个?

我可以选择使用应用程序缓存, 手动将对象缓存到分发的memcached / redis集群 或者让hibernate二级缓存来执行缓存工作(对于那些应用程序对象)。 使用哪个更好?

JPA,从实体到数据库模式开始

使用JPA时哪个更好,特别是在启动新项目时? 从设计实体开始,然后让JPA生成数据库或者从数据库模式开始,让工具生成实体类? 我是一家小公司的一部分。 我是软件开发人员和DBA。 我有完全的应用程序和数据库设计自由 我刚刚开始这个项目

JPA中的TransactionAttribute.REQUIRES_NEW

我测试了我的ejb jpa交易。 我使用Container管理的entityManager: @PersistenceContext(unitName = “ParticularUnit”) EntityManager em; 这样我有事务PersistanceContext范围和容器管理每个事务。 对于池化会话bean的每个实例,创建了entityManager的实例。 当我使用@TransactionAttribute(TransactionAttributeType.REQUIRED)标记bean方法并在其中调用两个方法时,我预期方法test1将有另一个PersitenceContext,但我很惊讶,因为它是相同的。 @TransactionAttribute(TransactionAttributeType.REQUIRED) public void test(Configuration config){ if (!em.contains(config)) { config = em.find(Configuration.class, config.getId()); } System.out.println(“********************”); System.out.println(“actiovation, em= “+ em); System.out.println(“actiovation, config= “+ config); System.out.println(“*********************”); test1(config); test2(config); } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) public void test1(Configuration config){ config = em.find(Configuration.class, config.getId()); System.out.println(“////////”); System.out.println(“requires_new”+ config); System.out.println(“requires_new, em= “+ em); System.out.println(“—————-“); } […]

如何将JPA中的自定义函数转换为谓词?

我有一个自定义的函数实现(接口SQLFunction ),如下所示: public class FilterFunction implements SQLFunction { @Override public boolean hasArguments() { return true; } @Override public boolean hasParenthesesIfNoArguments() { return false; } @Override public Type getReturnType(Type firstArgumentType, Mapping mapping) throws QueryException { return StandardBasicTypes.STRING; } @Override public String render(Type firstArgumentType, List arguments, SessionFactoryImplementor factory) throws QueryException { return arguments.get(0).toString(); } } 所以它只需要一个参数并用它替换函数。 SQL可能如下所示: […]

JPA和独特的领域

我的应用程序中有两个持久性对象:附加到事物的东西和标签。 该应用程序可以生成带有标签的东西的集合。 标记对象具有唯一的名称(使用相同的标记标记两次没有意义)。 当插入Thing(附加了标记对象)时,db中可能已经存在一些具有相同名称的标记对象。 现在这里是我不记得有关JPA的部分,有没有办法告诉JPA如果它违反了唯一约束,它不应该尝试将相应的对象添加到db? 或者有没有办法有效地执行此操作而无需首先获取所有对象,然后将该集合合并到内存中然后将所有内容写回来? 我也想知道是否可以立即保留整个集合,或者在使用JPA时是否必须为每个对象调用persist?