Tag: jpa

一般来说哪种Java ORM被认为是性能最高的?

一般来说哪种Java ORM被认为是性能最高的? 我意识到这可能意味着更少的function,但只是想要一个想法。

JPA:从属性创建EntityManagerFactory

我在JAR-Project中使用JPA并使用persistence.xml来设置我的EntityManager。 但是由于persistence.xml在构建之后位于JAR内部,因此用户之后更改设置非常复杂。 所以我正在寻找一个解决方案,我可以通过在运行时加载的属性文件配置我的连接。 我在网上遇到了这个解决方案: Map properties = new HashMap(); // Configure the internal EclipseLink connection pool properties.put(JDBC_DRIVER, “oracle.jdbc.OracleDriver”); properties.put(JDBC_URL, “jdbc:oracle:thin:@localhost:1521:ORCL”); properties.put(JDBC_USER, “user-name”); properties.put(JDBC_PASSWORD, “password”); Persistence.createEntityManagerFactory(“unit-name”, properties); 这是我正在寻找的解决方案,但我在这里缺少一件事:在我的persistence.xml中,我还在映射文件上声明了一个模式名称: persistence.xml中: org.eclipse.persistence.jpa.PersistenceProvider … true META-INF/orm.xml orm.xml中: SCHEMA_NAME 所以我的问题基本上是:我是否可以使用在运行时设置架构的属性,就像我对其他属性一样? 或者甚至有更好的解决方案? 提前致谢!

JPA EntityManager:merge()试图在db中创建一个新行 – 为什么?

我通过Play Framework使用JPA。 我正在检查是否缓存了User对象,如果是,我将检索它并merge()它以便我可以更新字段并稍后保存更改: user = (User) Cache.get(“user-auth-” + sessionAuthToken); if (user != null) { user = user.merge(); // I believe this is the same as EntityManager.merge() } 但是,当我这样做时,我收到以下错误: PersistenceException occured : org.hibernate.exception.ConstraintViolationException: could not insert: [models.User] … Caused by: com.mysql.jdbc.exceptions.jdbc4. MySQLIntegrityConstraintViolationException: Duplicate entry ‘1235411688335416533’ for key ‘authToken’ 它似乎试图插入一个新用户,即使该用户应该是,并且已经在数据库中。 为什么merge()会这样做? 或者也许我会以完全错误的方式解决这个问题 – 建议会受到赞赏。

正确使用Entity和DTO以在Restful Web服务中提供Json

有很多文章说JPA / hibernate不需要使用DTO 在视图模式中使用open会话,或者在规则化的汇编阶段使用,以避免出现未获取数据的问题.Hibernate使开发人员免于编写繁琐的数据传输对象(DTO)…以上几行来自https://docs.jboss.org /hibernate/orm/3.5/reference/en/html/best-practices.html 在SO成员Bohzo的一篇文章中 ,我很少需要阅读DTO 甚至在反对暴露实体的文章中声明当实体没有任何行为时(当它们是POJO时)不需要具有DTO,如在贫血域模型中那样 假设有一个Entity类 class Department{ List employees //lazily loaded collection 集合中的每个对象都包含另一个延迟加载的集合 class Employee{ List accounts 有一个getDepartment()方法,由restful服务用来提供Department的Json信息。 可能的解决方案是 解决方案1)根据hibernate文档打开和关闭每个请求的hibernate会话(这是控制器中最重要的方法是事务性的?)或更好的使用Spring的OpenSessionInViewFilter按照这个SOpost 为什么不能重新打开会话并获取延迟加载的对象而不是抛出exception?有没有办法用JPA / hibernate配置它? 解决方案2)再次在hibernate doc中,另一种方法是进行汇编阶段。它究竟意味着什么? 将getDepartment API分解为DAO的不同API? 解决方案3)使用DTO即使使用DTO,持久层如何知道视图是否需要一个完全加载的部门。这导致将API分解为getDepartmentOnly()getDepartmentWithEmployees()和其他人说是否获得100%的部门对象或它的一部分一个API分解成许多,一个实体映射到许多DTO 解决方案4)正如bohzo的文章中的分页视图一样,避免了延迟加载并且有查询来获取有限的结果 请更正解决方案2并解释hibernate文档中的用途?

没有persistence.xml的JPA

我正在尝试使用Guice Persist和JPA,它建议通过persistence.xml使用配置。 来自本地Hibernate背景,其中以编程方式获取配置,是否有一种简单的方法来配置没有persistence.xml文件的JpaPersistModule,或者rump persistence.xml是否总是必须存在? 如果不存在这样的选项,可能就是我可能需要使用PersistenceProvider(假设“默认”以某种方式解析persistence.xml)。 有关使用JPA SPI的任何教程吗?

使用JPA表独占锁定

是否可以以数据库无关的方式使用JPA专门锁定整个表(例如,不使用本机查询)? 到目前为止,我只看到EntityManager.lock(*)但这只锁定给定记录。

IBM Websphere JPA配置 – 如何更新persistence.xml

我是EJB 3和JPA的新手。 我在appserver中创建了一个数据源,它是jdbc/AppDataSource 。 默认持久性提供程序保留为com.ibm.websphere.persistence.PersistenceProviderImpl 。 我将默认的jta数据源JNDI名称AppDataSource为AppDataSource本身。 我对JTA和非JTA感到困惑。 它们的区别是什么? 我生成了实体并在bean中创建了一个EntityTransaction对象。 在调用persist()和commit()方法时,我收到一个错误: javax.ejb.EJBException: See nested exception; nested exception is: org.apache.openjpa.persistence.ArgumentException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property. Caused by: org.apache.openjpa.persistence.ArgumentException: A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property. openjpa如何在这里展示? 截至目前,我的persistence.xml仅包含实体类名称。 如何使其使用数据源的默认appserver值。 或者我怎样才能在persistence.xml提供jpa提供程序和数据源详细信息的详细信息? 请提供您的意见。

如何在运行时配置JPA表名?

我有一个问题,我只有一个数据库可供使用,但我有多个服务器,我希望他们为每个服务器使用不同的表名。 现在我的class级配置为: @Entity @Table(name=”loader_queue”) class LoaderQueue 我希望能够让dev1服务器指向loader_queue_dev1表,dev2服务器指向loader_queue_dev2表。 有没有一种方法可以使用或不使用注释来做到这一点? 我希望能够有一个单独的构建,然后在运行时使用类似系统属性的东西来更改该表名。

HIbernate无法使用外键删除实体。 外键设置为null

这个问题在很多方面都有问题,但没有一个解决方案对我有用。 我正在尝试删除父实体,我希望也删除所有子实体。 我的实体: @Entity @Table(name = “item”, catalog = “myshchema”) public class Item implements java.io.Serializable { @JoinColumn(name = “item_id”, insertable = false, updatable = false, nullable = false) @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true) private Set categories; /* Getters and Setters and other fields*/ } 物品表: CREATE TABLE `item` ( `item_id` int(11) […]

禁用JPA EclipseLink 2.4缓存

我正在尝试禁用EclipseLink 2.4缓存,因此如果其他应用程序在数据库中更改了数据,则在我的应用程序中刷新相同的数据,使用EclipseLink 2.4,而不重新启动它。 这些属性似乎都不起作用: NONE … 帮助的唯一选择是: typedQuery.setHint(QueryHints.REFRESH, HintValues.TRUE); 但这对我来说不是一个选项,因为现在该应用程序已编写,我不想搜索所有查询或em.find()方法并将此提示放入。 编辑1:此处描述了类似的问题: http : //eclipse.1072660.n5.nabble.com/Notifications-about-external-database-changes-td5389.html 编辑2:总结一下,我希望所有查询和查找调用都会刷新从数据库中获取的数据。