Tag: jpa

是否有任何良好的通用JPA DAO实现?

根据这篇文章 ,通用JPA DAO(数据访问对象)是一个非常好的模式。 有没有好的实施?

在Spring中将PersistenceException转换为DataAccessException

我正在尝试在Spring + JPA + Hibernate环境中处理唯一的键约束违规。 我使用PersistenceExceptionTranslationPostProcessor将PersistenceException转换为DataAccessException 。 当存在唯一的键约束违规时,我会期望抛出DuplicateKeyException或DataIntegrityViolationException ,但我得到的是一个包装PersistenceException的JpaSystemException 。 使用DataAccessException层次结构的重点是,它的细粒度足以不必查找特定于供应商的错误代码吗? 我如何让Spring将PersistenceException转换为更具体的DataAccessException ? 编辑:我注意到DataAccessUtils.translateIfNecessary()中的this.jpaDialect为null。 我需要配置一些设置来将this.jpaDialect设置为HibernateJpaDialect吗? 谢谢!

如何在使用JPA进行映射时增加mysql中String的长度

我在JPA遇到了一些麻烦。 如果有人能提供解决方案,我会非常感激。 用JPA(我使用的是MySQL DB),比方说,我有一个映射如下的类: @Entity class Employee{ int id; String employeeName; //getters and setters… } 映射到表时,我看到String在Mysql中使用varchar(255)映射。 但是,假设我有一个名字超过255个字符的员工,它会显示数据截断错误。 我知道我们可以通过在Employee列中添加“length”属性来解决这个问题: @column(length=1000) String employeeName; 这是唯一可行的方法吗? 我想,如果我们只是映射到java中的String,数据库将动态分配长度。

如何进行连接提取而不是使用EclipseLink选择fectching?

我在两个实体之间有一个OneToOne关系。 默认情况下,这种关系很急切,但是在记录请求时,我只看到多个选择,不会出现连接 。 迫切渴望的同样的事情。 你知道如何告诉eclipselink使用连接提取(如hibernate中的@Fetch(JOIN))吗? 谢谢

JPA with Hibernate 5:以编程方式创建EntityManagerFactory

这个问题具体是关于以编程方式创建由Hibernate 5支持的JPA EntityManagerFactory ,这意味着没有配置xml文件 而不使用Spring 。 此外,这个问题具体是关于使用Hibernate Interceptor创建EntityManagerFactory 。 我知道如何以我想要的方式创建一个Hibernate SessionFactory ,但我不想要一个Hibernate SessionFactory ,我想要一个由Hibernate SessionFactory支持的JPA EntityManagerFactory 。 给定一个EntityManagerFactory有一种获取底层SessionFactory ,但是如果你拥有的是SessionFactory并且你想要的只是一个EntityManagerFactory包装器,那么你似乎运气不好。 使用Hibernate版本4.2.2 Ejb3Configuration已被弃用,但似乎没有其他方法以编程方式创建EntityManagerFactory ,所以我做了类似这样的事情: @SuppressWarnings( “deprecation” ) EntityManagerFactory buildEntityManagerFactory( UnmodifiableMap properties, UnmodifiableCollection<Class> annotatedClasses, Interceptor interceptor ) { Ejb3Configuration cfg = new Ejb3Configuration(); for( Binding binding : properties ) cfg.setProperty( binding.key, binding.value ); for( Class annotatedClass : annotatedClasses […]

EntityManager.flush()在Java Web服务中提交事务

编辑 : 谢谢大家的答案,但问题出在我的数据源配置,实际上是在自动提交模式。 请参阅下面的答案了解详情。 EntityManager.flush()方法的Javadoc和在Google中搜索它似乎都表明flush方法只将挂起的语句发送到数据库并且不提交事务。 但是我创建的一个简单的测试Web服务(在Java 7中,Oracle 11gR2,JBoss 7.1和Web服务被打包为jar文件)似乎表明不是这样的: 这是表创建脚本: CREATE TABLE test( id INTEGER NOT NULL, name VARCHAR2(20), CONSTRAINT test_pk PRIMARY KEY (“ID”) ); CREATE SEQUENCE test_seq; 这是相应的实体: @Entity @Table(name = “TEST”) public class Test implements Serializable { private static final long serialVersionUID = 9192814682033048425L; @Id @Column(name = “ID”) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = […]

Hibernate JPA ManyToOne复合键

我正在尝试设置我的实体以允许pks。 我的数据库包含两个字段, dealer_detail_id pk user_detail_id pk 两者都在相应的表中加入id。 到目前为止,我已经尝试过这个但没有成功。 @Embeddable public class DealerUserPk implements Serializable { private Integer dealerDetail; private Integer userDetail; DealerUser @Embeddable @Table(name = “dealer_user”, schema = “account”) public class DealerUser implements Serializable { @EmbeddedId private DealerUserPk id; @Id @ManyToOne @JoinColumn(name = “dealer_detail_id”, referencedColumnName = “id”) private DealerDetail dealerDetail; @Id @ManyToOne @JoinColumn(name = “user_detail_id”, […]

当使用EntityManager的createQuery()和find()方法时?

我想知道这些方法之间的区别。 使用EntityManager的createQuery()和find()方法时? 他们每个人的优势是什么? 谢谢你的回答。

乐观锁定的重试机制(弹簧数据+ JPA)

我们决定在我们的Web应用程序中使用乐观锁定,以便增加并发性并且不使用悲观锁定。 我们现在正在寻找重试解决方案。 我们希望对我们当前的代码库产生尽可能小的影响。 我们在Web上看到的解决方案之一是使用带注释的重试拦截器将方法标记为可重试。 问题是我们想要注释对它们有@Transactional注释的方法,但拦截器由于某种原因无法重试它们。 (拦截器完美地重试非事务性方法。) 所以: 1)重试的替代方案对我们的代码影响最小吗? 2)该解决方案是否有任何文档\教程? 3)是否可以重试@Transactional注释方法? 干杯!

如果找不到实体,则为空对象

我正在使用Hibernate和JPA。 我有一个名为Customer的实体引用了ParentCustomer : public class Customer { @Id @GeneratedValue @Column(name = “CustomerID”) private int id; @ManyToOne @JoinColumn(name = “ParentCustomerID”) private Customer parent; // … } 但是在我的数据库中有一些客户没有父级,因此ParentCustomerID设置为0 。 我测试课程时得到的例外是: javax.persistence.EntityNotFoundException: Unable to find it.keyforup.pat.data.entities.Customer with id 0 当id为0时,有没有办法将ParentCustomer设置为null ?