我正在使用OpenJPA,我遇到了锁定问题。 我已经了解了什么是OptimisticLockException以及什么时候抛出它。 但我该如何处理呢? 在*下面,您可以找到关于乐观锁定exception的小段落。 简而言之,我如何完全禁用锁管理器? 在我的persistent.xml中,我有以下xml代码,但它不起作用。 为什么? … … *根据关于Java Persistent的wikibooks: 处理乐观锁定exception 不幸的是,程序员经常会因为自己的利益而过于聪明。 使用乐观锁定时出现的第一个问题是当发生OptimisticLockException时要执行的操作。 友好邻居超级程序员的典型反应是自动处理exception。 他们将只创建一个新事务,刷新对象以重置其版本,并将数据合并回对象并重新提交。 Presto问题解决了,或者是吗? 这实际上首先打破了整个锁定点。 如果这是你想要的,你也可以不使用锁定 。 不幸的是,很少会自动处理OptimisticLockException,你真的需要打扰用户这个问题。 您应该向用户报告冲突,并且说“您的抱歉但发生编辑冲突并且他们将不得不重做他们的工作”,或者在最好的情况下,刷新对象并向用户显示当前数据和他们提交的数据并帮助他们合并两者。 一些自动合并工具将比较数据的两个冲突版本,如果没有单个字段冲突,那么数据将在没有用户帮助的情况下自动合并。 这是大多数软件版本控制系统所做的。 不幸的是,用户通常能够更好地决定何时出现冲突而不是程序,只是因为.java文件的两个版本没有改变相同的代码行并不意味着没有冲突,第一个用户可能已经删除了另一个用户添加了一个引用方法的方法,以及导致典型的每晚构建经常中断的几个其他可能的问题。
预读: 如何使用hibernate持久化HashMap 我的问题围绕着我要用JPA映射的以下结构: Map<User, List> 我的POJO非常简单(没有复合类型等,只有一些原语)。 如何在链接问题中实施建议? 如何使用@Lob仅注释List部分(当我只是注释该字段时,我得到一个类转换错误,因为HashMap不能转换为Blob,这是我的问题的根源 – 我不能只注释地图的价值部分)? 我不确定是否需要创建一个实现Serial包装List的包装类型,或者只使用ArrayList,它本身就是Serializable。 无论如何,我没有设法坚持这个Map实例…… 顺便说一句,我愿意接受有关这一切的不同建议:我可以将List作为每个用户的类成员,尽管我不认为它属于那里,因为它不是用户数据(如帐户数据) ;姓名,地址等)。 它类似于购买,所以我把它们放在一个类似实用程序的类(用户类外部)来处理这些购买,以便拥有更多的模块化模型。 我想听听关于这听起来是否明智的建议。 任何有用的建议都将获得虚构的cookie(显然是upvotes)。 它们在非虚构的意义上是无脂肪的。 干杯。
我有使用JPA / Eclipselink连接到数据库的Oracle DB和Java项目。 问题是当数据库中的某些数据更新(手动使用Oracle SQL开发人员)时,这些数据不能通过JPA看到,只能看旧值。 什么会导致这样的问题?
我对Spring和Spring-Batch特别陌生。 我还是设法安装了Spring Batch-Admin 。 我添加了自定义作业和Hibernate / JPA以实现持久性。 一切都按预期工作,直到第一个块应该持久化。 然后我收到以下错误消息: org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: Already value [org.springframework.jdbc.datasource.ConnectionHolder@60d31437] for key [org.springframework.jdbc.datasource.DriverManagerDataSource@12da4b19] bound to thread [jobLauncherTaskExecutor-1] 这是完整的堆栈跟踪 : org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: Already value [org.springframework.jdbc.datasource.ConnectionHolder@43f9e588] for key [org.springframework.jdbc.datasource.DriverManagerDataSource@84f171a] bound to thread [jobLauncherTaskExecutor-1] […]
我遇到了一个优化问题,我无法弄清楚为什么我的查询太慢了。 我的实体在这里: @Entity @Table(name = “CLIENT”) public class Client { private static final long serialVersionUID = 1L; @Id @Column(name = “CLIENT_ID”) @SequenceGenerator(name = “ID_GENERATOR”, sequenceName = “CLIENT_S”, allocationSize = 1, initialValue = 1) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “ID_GENERATOR”) private Long id; @Column(name=”LOGIN”) private String login; @Column(name=”PASSWORD”) private String password; 和DAO @NoRepositoryBean public interface ClientDao […]
我在代码中的Employee-Project之间创建了多对多关系,但是当我想使用它时抛出此exception: com.microsoft.sqlserver.jdbc.SQLServerException:无效的对象名称’employee_project’。 我试过了,但是我没有成功找到这个exception的根本原因。 所以,请帮帮我。 以下是Employee和Project的POJO以及抛出此exception的代码 员工pojo: @Entity @Table(name = “Employee”) public class Employee { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = “EMPLOYEE_ID_PK”) private int employeeIdPk; @ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = “workers”) private Collection projects = new HashSet(0); } 项目pojo: @Entity @Table(name = “Project”) public class Project { @Id @GeneratedValue(strategy = […]
在我的Web服务应用程序中,我实现异步任务执行器以在数据库中插入对象。 但在第一次插入时,它会抛出exception。 org.springframework.orm.hibernate3.HibernateSystemException: A collection with cascade=”all-delete-orphan” was no longer referenced by the owning entity instance: 第二次刷新url时,对象成功插入数据库。 问题在于未插入对象的新请求的第一个实例。 XML文件 我使用了org.springframework.core.task.SimpleAsyncTaskExecutor / org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor以及子表列表是clear() , addall() 。 但没有运气。 如果我对任务执行程序标记进行注释,则会正确插入所有新请求对象。 在我的场景中,我必须实现异步任务执行器。 RptServiceImp.java public class RptServiceImp{ @javax.annotation.Resource private ApplicationEventPublisher applicationEventPublisher; @Transactional public void process(final RqstLoad rqstLoad ) { try { applicationEventPublisher.publishEvent(new LoggingEvt (this)); }catch(Exception e){ System.out.println(“e:: “+e); e.printStackTrace(); } […]
以下代码行: EntityGraph graph = this.em.createEntityGraph(Patient.class); 在eclipse中导致以下编译错误: The method createEntityGraph(Class) is undefined for the type EntityManager 我该如何解决这个错误? 以下是我的pom.xml的相关部分: 1.7 4.0.6.RELEASE 1.6.4.RELEASE 4.3.5.Final 5.1.1.Final 7.0.42 5.1.27 1.7.4 org.jvnet.hyperjaxb3 hyperjaxb3-ejb-runtime 0.6.0 org.jvnet.hyperjaxb3 hyperjaxb3-ejb-roundtrip 0.6.0 org.springframework.data spring-data-jpa ${spring-data-jpa.version} org.springframework spring-jdbc ${spring-framework.version} org.springframework spring-aop ${spring-framework.version} org.springframework spring-webmvc ${spring-framework.version} org.springframework spring-tx ${spring-framework.version} org.springframework spring-context-support ${spring-framework.version} org.springframework spring-orm ${spring-framework.version} org.springframework spring-oxm ${spring-framework.version} […]
我正在配置JPA以使用SQLite数据库,以hibernate作为提供程序。 我将一个pojo映射到一个表,没有fk,现在只是简单的。 我正在使用我在互联网上找到的SQLDialect。当我尝试初始化我的应用程序时,我得到了这个堆栈跟踪: java.sql.SQLException: SQLite supports only TRANSACTION_SERIALIZABLE at org.sqlite.Conn.setTransactionIsolation(Conn.java:131) at com.mchange.v2.c3p0.impl.NewProxyConnection.setTransactionIsolation(NewProxyConnection.java:701) at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:58) at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:27) at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:127) at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:314) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1300) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:730) at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:121) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) at hr.loggingserver.listeners.ApplicationListener.contextInitialized(ApplicationListener.java:27) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) […]
我尝试在NetBeans中的JavaFx应用程序中使用EntityManager(我的解决方案连接到postgres),我按如下方式进行: 1)我创建了一个持久单元。 2)然后从数据库添加实体类。 但是我无法让它工作,我试图在另一个线程中寻求帮助实体管理器不能在JavaFX中工作,但也无法使它工作,是否有任何干净清晰的教程或课程,我可以清楚地找到在JavaFx Fxml应用程序中使用EntityManager