Tag: jpa

JPA CriteriaQuery按最新子项属性排序

我有2个实体:Project和ProjectStatus。 项目实体: @Entity public class Project { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @OneToMany(mappedBy = “project”) private List projectStatusses; } 项目状态实体: @Entity public class ProjectStatus { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @ManyToOne private Project project; @Enumerated(EnumType.STRING) private ProjectStatusType statusType; } 我想用CriteriaQuery.orderBy按其最新状态类型订购项目。 我想出了以下内容: CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(Project.class); Root root = criteriaQuery.from(Project.class); Join join = root.join(“projectStatusses”, […]

Java-EE6:FetchType.LAZY与静态编织抛出奇怪的exception

我的解决方案包含3个不同的项目: 使用Netbeans自动生成Facade的EJB项目来管理实体类和persistence.xml 包含所有@Entity注释和静态编织数据库类的类库,以及用于外观ejb的远程接口(在EJB和独立客户端之间共享) 独立客户端,主要由Swing GUI类组成 我使用Glassfish 3.1.2,Eclipselink 2.3作为JPA-provider,Netbeans 7.1.1和MySQL数据库。 我配置了一个Ant-task,它基于persistence.xml静态编织我的实体类。 我有几个@OneToOne,@ ManyToOne和@ManyToMany用fetch = FetchType.LAZY装饰的实体之间的注释关系。 现在我得到了以下错误: Exception in thread “Mainframe Loader” Local Exception Stack: Exception [EclipseLink-7242] (Eclipse Persistence Services – 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.ValidationException Exception Description: An attempt was made to traverse a relationship using indirection that had a null Session. This often occurs when an entity with […]

Tomcat活动线程堆积并停止服务器

我们的生产服务器(apache-tomcat-7.0.6)遇到了这个问题,它使用MySQL作为DB运行Spring-JPA-Hibernate应用程序。 在此问题期间,服务器变得缓慢,并且在一分钟内它变得没有响应,活动的tomcat线程数量最多可以达到200(我们使用javamelody来观察这些事情)。 日志看起来像: 2012-04-07 07:53:48,058 DEBUG AuthenticationHandler:(“http-bio-7006”-exec-304):35 – Authentication handler : ~ 2012-04-07 07:53:48,059 DEBUG AuthenticationHandler:(“http-bio-7006”-exec-304):45 – Service Id : 1333765428059-/xxx-framework-service/platform/items/search/ 2012-04-07 07:53:48,060 DEBUG DefaultListableBeanFactory:(“http-bio-7006”-exec-304):242 – Returning cached instance of singleton bean ‘transactionManager’ 2012-04-07 07:53:48,060 DEBUG JpaTransactionManager:(“http-bio-7006″-exec-304):365 – Creating new transaction with name [com.xxx.framework.manager.ItemManager.search]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly; ” 2012-04-07 07:53:48,060 DEBUG JpaTransactionManager:(“http-bio-7006”-exec-304):323 – Opened new EntityManager [org.hibernate.ejb.EntityManagerImpl@6aee43a9] […]

如何让Hibernate在与JPA一起使用时自动在数据库中创建表?

我是JPA的新手,现在我正在尝试理解标准示例,我在线阅读并看到了一些stackoverflow问题,我在所有这些问题中发现的是以下语句将允许hibernate在运行时创建表。 hibernate.hbm2ddl.auto=create 但每当我在mysql数据库中运行没有表的代码时,它会抛出以下错误: . ____ _ __ _ _ /\\ / ___’_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | ‘_ | ‘_| | ‘_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ‘ |____| .__|_| […]

使用jpa实体管理器在spring应用程序中将blob导入mysql

我正在修改spring petclinic应用程序以将文档从用户的计算机导入MySQL。 我正在使用petclinic应用程序中的jpa体系结构,该应用程序在存储库文件中使用了EntityManager对象。 我理解我需要使用以下语法从EntityManager公开会话对象,然后创建一个blob插入到数据库中: Session session = em.unwrap(Session.class);//em is an EntityManager Blob blob = (blob)Hibernate.getLobCreator(session).createBlob(document.getFile().getInputStream(), document.getFile().getSize()); 根据petclinic jpa架构,我使用了五个java文件: View/JSP: CreateOrUpdateDocument.jsp Model: Document.java Controller: DocumentController.java Repository: JpaDocumentRepository.java Service: ClinicServiceImpl.java 我的问题是在哪里设置它以及如何设置它。 现在,我的代码抛出了以下exception,我认为这与Document.java的file属性没有给出任何注释这一事实有关: org.hibernate.MappingException: Could not determine type for: org.springframework.web.multipart.MultipartFile, at table: documents, for columns: [org.hibernate.mapping.Column(file) 我将在下面包含每个文件的相关部分,堆栈跟踪和文档表的sql定义。 为了使文档成功地从用户的计算机进入服务器上的MySQL数据库的文档表,我需要做出哪些更改? CreateOrUpdateDocument.jsp: $(function () {$(“#created”).datepicker({ dateFormat: ‘yy/mm/dd’});}); New Document Patient Add […]

Junit:为删除实体的方法编写测试?

对于下面的代码,我可以编写哪些最详尽的测试? public void deleteFromPerson(person person) { person = personRepository.returnPerson(person.getId()); personRepository.delete(person); } 此方法位于a service类中。 该方法调用JpaRepository ,然后在实体上调用它的delete()方法。 如果无法测试实体是否被删除,是否还有其他 tests cases可以在该方法上运行?

NamingException:jta.UserTransaction

我有一个直接使用Java Transaction API资源的hibernate应用程序。 我正在尝试使用UserTransaction来完成一些基本的数据库事务 UserTransaction接口定义允许应用程序显式管理事务边界的方法 在hibernate.cfg.xml文件中,我有以下属性: true java:comp/env/myDataSource java:comp/UserTransaction org.hibernate.transaction.JTATransactionFactory 在应用程序的web.xml中,UserTransaction在 Object factory for MyBean instances. UserTransaction javax.transaction.UserTransaction 在代码中,我尝试使用InitialContext以其JNDI名称查找UserTransaction public UserTransaction getTransactionContext() throws Exception { if (this.ut == null) { ut = (UserTransaction)new InitialContext().lookup(“java:comp/UserTransaction”); } return ut; } 但是返回以下exception: 03:27:37,530 ERROR [someServlet:555] Error in someMethod javax.naming.NamingException: Cannot create resource instance at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:117) at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321) at […]

尝试将数据输入DB时出现InvalidStateException

我有一个方法返回特定DB的实体管理器。现在我第一次使用该方法获取实体管理器一切正常。我可以使用实体管理器将数据保存到任何表A,B,C中。现在说我保存在表B中时获得exception 现在当我尝试在上面发生exception之后对DB执行任何操作时,下次当我尝试运行相同的代码时,它在表A本身更新时失败。我可以看到下面的eception org.apache.openjpa.persistence.InvalidStateException: The factory has been closed. The stack trace at which the factory was closed is available if Runtime=TRACE logging is enabled. at org.apache.openjpa.kernel.AbstractBrokerFactory.assertOpen(AbstractBrokerFactory.java:673) at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:182) at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142) at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192) at ..

JPA内存管理问题

首先,一点背景。 我正在研究从SQL Server中提取数据的管理软件。 我正在使用JPA创建表的Entity实例以便在管理软件中进行操作(我现在只使用JPA几天)。 作为测试,我将下面的代码汇总在一起,以测试存储多少内存将占用最丰富的表(PeriodicalTable)的对象,这些表有18,500行(或大约有)并且只能增长; public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory(“PersistenceDemoPU”); EntityManager em = emf.createEntityManager(); Query query = em.createQuery(“SELECT p FROM PeriodicalTable p”); //query.setMaxResults(7000); List results = query.getResultList(); PeriodicalTable storedPlayer; for (int i = 0; i < results.size(); i++){ storedPlayer = results.get(i); System.out.println(storedPlayer.toString()); if (i == (results.size()-1)){System.out.println("Total results: "+(i+1)); } } […]

JPA延迟加载性能有多重要?

我理解这对于具体的应用是非常具体的,但我只是想知道一般意见是什么,或者至少在这个问题上有一些个人经验。 我对“视图中的开放会话”模式感到厌恶,所以为了避免这种情况,我正在考虑简单地抓取所有内容,并在服务层中使用查询来获取更大的内容。 有人用这个并后悔了吗? 是否有一些优雅的解决方案可以在视图层中延迟加载我不知道的?