Tag: jpa

默默无视remove()

有实体A引用(多对一)实体B,具有从B到A的反向(映射)引用。还有引用A到C和反向引用C到A.当我发出entityManager.remove(A )然后flush(),“删除”不是gerenated! 但也没有例外。 这就像没有调用remove()一样。 为什么会这样? 如果在remove()之前我们从反向引用B.listOfA和C.listOfA中提取A,则会按预期生成“delete”。 还要注意我的另一个问题 ,我得出结论,orphanRemoval并不总是按预期工作。 现在我开始怀疑可能级联工作得很好,但在那之后实际的级联移除被“吞噬”了,就像我在这里描述的那样。

JPA Query.getResultList() – 以通用方式使用

我正在创建一个包含多个表的复杂查询,需要列出结果。 通常,我正在使用EntityManager并将结果映射到JPA-Representation: UserEntity user = em.find(UserEntity.class, “5”); 然后,我可以访问用户UserEntity类定义它的所有值。 但是,如何访问本机多表查询返回的字段值? 我得到的是一个对象列表。 到目前为止这很好,但对象是什么“是”? arrays? 地图? 采集? … //simpleExample Query query = em.createNativeQuery(“SELECT u.name,s.something FROM user u, someTable s WHERE s.user_id = u.id”); List list = query.getResultList(); //do sth. with the list, for example access “something” for every result row. 我想答案很简单,但是大多数例子只显示直接转换为targetClass时的用法。 PS:在示例中,我当然可以使用类映射。 但是在我的情况下someTable不是由JPA管理的,因此我没有实体,也没有它的类表示,因为我加入了20个表,我不想创建所有的类只是为了访问值。

如何在JPA / Hibernate中使用带字符串类型的@Id?

我有一个实体,其中包含string类型的主键。 该实体模型如下: @Entity public class MyEntity { @Id @Column(name=”PR_KEY”, unique=true) private String prKey; …. …. } 但我面临的问题是TypeMismatch。 org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.String, got class java.lang.Long

获取EntityManagerFactory的最佳实践

在Web应用程序(jsp / servlets)中获取EntityManagerFactory的最佳方法是什么? 这是一个好方法何时应该创建/打开EntityManagerFactory实例? 或者从JNDI或其他东西获得它更好吗?

使用Hibernate JPA 2.1将应用程序部署到IBM WebSphere会产生NullPointerException

我们正在尝试使用Hibernate将Java 7 Spring MVC应用程序部署到IBM WebSphere 8.5.5.2服务器中。 应用程序在Tomcat服务器上运行良好,但我们无法在WebSphere中运行它。 堆栈跟踪输出如下: [3/26/15 13:49:53:552 MDT] 00000066 AutowiredAnno I org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor JSR-330 ‘javax.inject.Inject’ annotation found and supported for autowiring [3/26/15 13:49:54:299 MDT] 00000066 LocalContaine I org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean createNativeEntityManagerFactory Building JPA container EntityManagerFactory for persistence unit ‘default’ [3/26/15 13:49:54:339 MDT] 00000066 LogHelper Z org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation HHH000204: Processing PersistenceUnitInfo [ name: default …] [3/26/15 […]

应该何时创建/打开EntityManagerFactory实例?

好的,我阅读了一些文章/示例如何在单例中编写实体管理器工厂。 其中一个对我来说最容易理解: http://javanotepad.blogspot.com/2007/05/jpa-entitymanagerfactory-in-web.html 我了解到EntityManagerFactory(EMF)应该只在应用程序范围内创建一次。 并确保在使用后关闭EMF(?) 所以我编写了EMF helper类来使用的业务方法: public class EmProvider { private static final String DB_PU = “KogaAlphaPU”; public static final boolean DEBUG = true; private static final EmProvider singleton = new EmProvider(); private EntityManagerFactory emf; private EmProvider() {} public static EmProvider getInstance() { return singleton; } public EntityManagerFactory getEntityManagerFactory() { if(emf == null) { […]

如何使用Hibernate(EntityManager)或JPA 2调用Oracle函数或过程

我有一个返回sys-refcursor的Oracle函数,当我使用Hibernate 4调用此函数时,我收到以下exception。 Hibernate: { ? = call my_function(?) } org.hibernate.exception.GenericJDBCException: could not execute query javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1360) at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1288) at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:313) 我该如何解决这个问题? Oraclefunction create or replace FUNCTION my_function(p_val IN varchar2) RETURN SYS_REFCURSOR AS my_cursor SYS_REFCURSOR; BEGIN OPEN my_cursor FOR SELECT emp_name FROM employees WHERE lower(emp_name) like lower(p_val||’%’); RETURN my_cursor; END; […]

java.lang.IllegalStateException:具有@ManyToMany 3实体的同一实体的多个表示forms

我有3个具有ManyToMany关系的实体,如下所示: 角色实体: @Entity public class Role { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer roleID; private String roleName; private String description; @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.EAGER) @JoinTable(name = “role_permission”, joinColumns = {@JoinColumn(name = “role_id”)}, inverseJoinColumns = {@JoinColumn(name = “permission_id”)}) private Set permissions = new LinkedHashSet(); 许可实体: @Entity public class Permission { @Id @GeneratedValue(strategy […]

Spring Boot,Spring Data JPA,带有多个DataSources

我正在尝试使用Spring Boot和Spring Data JPA将每个@Repositories连接到不同的DataSource。 我使用以下内容http://xantorohara.blogspot.com/2013/11/spring-boot-jdbc-with-multiple.html作为参考。 以下是我试图使用Spring Data JPA实现类似解决方案时使用的代码。 CustomerDbConfig.java (第一个数据源连接) @Configuration @EnableJpaRepositories( entityManagerFactoryRef = “orderEntityManager”, transactionManagerRef = “orderTransactionManager”, basePackages = {“com.mm.repository.customer”}) public class CustomerDbConfig { @Bean(name = “customerEntityManager”) public LocalContainerEntityManagerFactoryBean entityManagerFactory(){ LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource()); em.setPackagesToScan(new String[] {“com.mm.domain.customer”}); JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); em.setJpaVendorAdapter(vendorAdapter); em.setJpaProperties(additionalJpaProperties()); em.setPersistenceUnitName(“customerPersistence”); em.setPackagesToScan(“com.mm.domain.customer”); return em; } Properties additionalJpaProperties(){ Properties […]

JAXB映射对XML的循环引用

我有一个包含循环的对象图。 如何让JAXB处理这个问题? 我尝试在子类中使用@XmlTransient注释,但JAXB marshaller仍然检测到循环。 @Entity @XmlRootElement public class Contact { @Id private Long contactId; @OneToMany(mappedBy = “contact”) private List addresses; … } @Entity @XmlRootElement public class ContactAddress { @Id private Long contactAddressId; @ManyToOne @JoinColumn(name = “contact_id”) private Contact contact; private String address; … }