Tag: openjpa

如何禁用JPA的锁定系统?

我正在使用OpenJPA,我遇到了锁定问题。 我已经了解了什么是OptimisticLockException以及什么时候抛出它。 但我该如何处理呢? 在*下面,您可以找到关于乐观锁定exception的小段落。 简而言之,我如何完全禁用锁管理器? 在我的persistent.xml中,我有以下xml代码,但它不起作用。 为什么? … … *根据关于Java Persistent的wikibooks: 处理乐观锁定exception 不幸的是,程序员经常会因为自己的利益而过于聪明。 使用乐观锁定时出现的第一个问题是当发生OptimisticLockException时要执行的操作。 友好邻居超级程序员的典型反应是自动处理exception。 他们将只创建一个新事务,刷新对象以重置其版本,并将数据合并回对象并重新提交。 Presto问题解决了,或者是吗? 这实际上首先打破了整个锁定点。 如果这是你想要的,你也可以不使用锁定 。 不幸的是,很少会自动处理OptimisticLockException,你真的需要打扰用户这个问题。 您应该向用户报告冲突,并且说“您的抱歉但发生编辑冲突并且他们将不得不重做他们的工作”,或者在最好的情况下,刷新对象并向用户显示当前数据和他们提交的数据并帮助他们合并两者。 一些自动合并工具将比较数据的两个冲突版本,如果没有单个字段冲突,那么数据将在没有用户帮助的情况下自动合并。 这是大多数软件版本控制系统所做的。 不幸的是,用户通常能够更好地决定何时出现冲突而不是程序,只是因为.java文件的两个版本没有改变相同的代码行并不意味着没有冲突,第一个用户可能已经删除了另一个用户添加了一个引用方法的方法,以及导致典型的每晚构建经常中断的几个其他可能的问题。

如何在JPA中混合inheritance类型

如何在同一inheritance树中混合单表类型inheritance和连接表类型? 我没有使用hibernate只是JPA。 我知道通过阅读JPA规范,没有官方支持混合inheritance。 我无法改变架构。 它确实与hibernate一起工作但现在我需要使用openjpa来实现它。 我正在寻找一些解决方法。

是否允许JPA实体中的方法抛出exception?

我有一个@Entity的问题我试图创建。 当尝试使用OpenJPA实现在Eclipse中测试类时会出现问题(我没有尝试过其他人,所以不确定它是否适用于它们)。 我的测试用例很简单,因为它创建了一个EntityManagerFactory(它会自动在我的类路径中找到persistence.xml),然后它尝试从工厂创建一个EntityManager。 这是我遇到一个非常模糊的’PersistenceException:null’错误。 有问题的实体是以下LogError类。 我把它剥离到最低限度,它仍然会抛出错误。 @Entity @Table(name = “T_LOG_ERROR”) public class LogError { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long ID; private String ERROR; protected LogError() {} public String getErrorName() throws FieldNullException { if (this.ERROR == null) throw new FieldNullException(“error was null”, null); return this.ERROR; } public setError(SystemError error) { this.ERROR = error.getClass().getCanonicalName(); } } […]

使用OpenJPA从数据库中检索主键(ID)(?)

这是一个写入和读取mysql数据库的简单程序。 当我输入测试数据时,所有这些都在mySQL客户端中可见。 然而,当我使用OpenJPA检索相同的数据时,所有ID都显示为“0”,但名称是正确的。 在交易过程中,ID可能会丢失的原因是什么? POJOclass import java.io.Serializable; import javax.persistence.*; @Entity (name=”People”) public class People implements Serializable{ /** * */ private static final long serialVersionUID = 801578124126646759L; @Id private int id; @Column(length=32) private String name; public People(int id,String name) { setId(id); setName(name); } public int getId() { return id; } public void setId(int id) { this.id […]

尝试将数据输入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 1.0错误:该名称不是公认的实体或标识符。 已知实体名称:

我尝试执行简单的JPA 1.0代码时遇到exception。 可能是什么原因? 5453 DevPQRWDPBSSPersist WARN [P=351601:O=0:CT] openjpa.Enhance – This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: “[class com.XYZ.PQR.bss.client.db.data.markerentry, class com.XYZ.PQR.bss.client.db.data.Serviceproduct, class com.XYZ.PQR.bss.client.db.data.Agreementterms, class com.XYZ.PQR.bss.client.db.data.Offeringattribute, class com.XYZ.PQR.bss.client.db.data.marker, class com.XYZ.PQR.bss.client.db.data.OfferingpriceadjustmentrelPK, class com.XYZ.PQR.bss.client.db.data.Serviceoffering, class com.XYZ.PQR.bss.client.db.data.Offeringassociation, class com.XYZ.PQR.bss.client.db.data.OfferingpriceserviceofferingrelPK, class com.XYZ.PQR.bss.client.db.data.Offer, class com.XYZ.PQR.bss.client.db.data.Offeringpriceadjustmentrel, […]

java.lang.ClassCastException:[B不能强制转换为java.lang.String

我编写了一个带有Field LoginId和Password的权限类。 Iam使用AES_ENCRYPT加密passwrd并在db中加载它。 我想只检索解密的密码。 所以,我在OPEN JPA 2.0中使用NAEDQueryis使用AES_DECRYPT。 我写的查询是: Query q = em.createNativeQuery(“select AES_DECRYPT(l.password,?2) from loginDetails l where l.loginID = ?1”); q.setParameter(1, loginId); q.setParameter(2, getKey()); String s = q.getSingleResult(); 但我得到以下例外: java.lang.ClassCastException: [B cannot be cast to java.lang.String at com.rcs.chef.validation.UserValidation.decryptedPasswordForID(UserValidation.java:99) at com.rcs.chef.validation.UserValidation.validateUser(UserValidation.java:81) at com.rcs.chef.validation.UserValidation.activate(UserValidation.java:72) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:226) at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:824) […]

如何在JPQL语句中使用typcasting?

我在数据库中有两个Integer列(derby和db2)。 我需要在JPQL它们相互分开。 如果余数是十进制数,则两个类型为Integer列返回零,例如0.25变为0等,因为类型为int,因此可以理解。 在SQL我可以这样做 select CAST(column1 as decimal(6,2))/CAST(column2 as decimal(6,2))from Sometable; 但是什么是JPQL等价物。 一个选项可能是(我还没有尝试过)是在实体中有一个@Transient方法返回Decimal类型并在那里进行计算并将其传递给JPQL但我宁愿让SQL执行此操作。 Mysql不需要在数据库级别进行转换。 所以不同RDBMS的行为是不同的,这很好。 但是,JPQL应该如何处理需要使用本机查询来知道此操作需要强制转换为十进制。 添加方言也没有修复它。 请注意它是JPA1

使用openJPA MySQL进行运行时优化的例外情况

关于这个问题肯定有很多问题,我已经阅读了一些,但答案仍然没有得到解决。 我是JPA的新手,我只是想测试一个简单的应用程序,看看我是否可以正确配置它。 它是一个独立的应用程序,意味着它不会与Web服务器或任何东西一起运行。 实体类看起来像: @Entity public class Person{ @Id private String userID = null; @Transient private UserState userState = null; private String email = null; private String name = null; public Person(){ userID = null; email = null; name = null; userState = null; } public String getUserID() { return userID; } public void setUserID(String […]

OpenJPA – 交易管理不可用……(Fuse ESB)

我在Fuse ESB中使用JPA的RESOURCE_LOCAL事务类型时遇到问题。 我也不完全了解JTA或RESOURCE_LOCAL对我来说是否更好。 我的persistence.xml: org.apache.openjpa.persistence.PersistenceProviderImpl osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/invDataSource) osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/invDataSource) com.company.service.Invoice 我在blueprint.xml中的bean: 我的代码: entityManager.getTransaction().begin(); entityManager.persist(a); entityManager.persist(b); entityManager.getTransaction().commit(); exception,在我的persistence.xml中使用事务类型RESOURCE_LOCAL : java.lang.IllegalStateException: Transaction management is not available for container managed EntityManagers. 我也尝试在我的persistence.xml中使用事务类型JTA ,但后来我收到了OptimisticLockException 。 我不确定哪种方法更好(RESOURCE_LOCAL或JTA),但主要的是在我的代码对象中a和b需要在事务中持久化(全部或全部)。 我正在使用Fuse ESB(camel,cxf等)。 感谢您的任何提示或帮助。