Tag: jpa

在执行JPA查询时获取NoSuchMethodError:javax.persistence.Table.indexes()

我有带库的IntelliJ项目:Hibernate-entitymanager 4.3.4和JPA 2.0-2.0。 使用postgresql-9.3.1100.jdbc4连接到数据库。 怎么解决? jpa-ql>从ItemEntity中选择ItemEntity.name; java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:936) at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824) at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3790) at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3744) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:73) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:78) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at com.intellij.jpa.remote.impl.JpaFacadeImpl.createEntityManagerFactory(JpaFacadeImpl.java:16) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322) at sun.rmi.transport.Transport$1.run(Transport.java:177) at sun.rmi.transport.Transport$1.run(Transport.java:174) at java.security.AccessController.doPrivileged(Native Method) at […]

如何使用LEFT OUTER JOIN创建JPA查询

我开始学习JPA,并基于我在SQL Server中测试的以下本机SQL实现了JPA查询的示例: SELECT f.StudentID, f.Name, f.Age, f.Class1, f.Class2 FROM Student f LEFT OUTER JOIN ClassTbl s ON s.ClassID = f.Class1 OR s.ClassID = f.Class2 WHERE s.ClassName = ‘abc’ 从上面的SQL我构建了以下JPQL查询: SELECT f FROM Student f LEFT JOIN f.Class1 s; 如您所见,我仍然缺少原始查询中的条件OR s.ClassID = f.Class2 。 我的问题是,我怎样才能把它放到我的JPQL中?

JPA懒惰列表上的流

我有这样的列表的JPA实体: @OneToMany(mappedBy = “scadaElement”, orphanRemoval = true) private List elementParameters; 和地图formsElementParameter @ManyToOne @JoinColumn(name = “SCADAELEMENT_ID”) ScadaElement scadaElement; 当我获得带有elementParameters列表的实体并在其上执行流时,什么都不做,即使我使用.size()触发列表但是当我使用for循环执行相同操作时。 System.out.println(“elements size: ” + s.getElementParameters().size()); s.getElementParameters() .stream() .forEach( a -> { System.out.println(“elementId: ” + a.getId()); } ); 是否有任何解决方案使该流工作? 我使用eclipselink作为JPA提供者。

头脑风暴:奇怪的JPA问题,可能是classpath或jar版本问题?

我看到一个奇怪的错误消息,我正在寻找一些关于问题可能是什么的想法。 我对使用JPA有点新意。 我有一个应用程序,我使用Spring的Entity Manager Factory(LocalContainerEntityManagerFactoryBean),EclipseLink作为我的ORM提供程序,连接到MySQL DB并使用Maven构建。 我不确定这些是否重要…… 当我将此应用程序部署到Glassfish时,应用程序按预期工作。 问题是,我创建了一组独立的unit testing,以便在Glassfish之外运行,但这些测试无法正常工作。 我收到以下错误( 我已经编辑了一些类名 ) com.xyz.abc.services.persistence.entity.MyEntity cannot be cast to com.xyz.abc.services.persistence.entity.MyEntity 该对象不能转换为相同类型的类? 怎么可能? 这是一段错误的代码片段 Query q = entityManager.createNamedQuery(“MyEntity.findAll”); List entityObjects = q.getResultList(); for (Object entityObject: entityObjects) { com.xyz.abc.services.persistence.entity.MyEntity entity = (com.xyz.abc.services.persistence.entity.MyEntity) entityObject; 以前,我有这个代码产生相同的错误: CriteriaQuery cq = entityManager.getCriteriaBuilder().createQuery(); cq.select(cq.from(com.xyz.abc.services.persistence.entity.MyEntity.class)); List entityObjects = entityManager.createQuery(cq).getResultList(); for (Object entityObject: entityObjects) { […]

JPA – EclipseLink – 如何更改默认架构

我正在使用weblogic和oracle编写Web应用程序。 数据源是通过JNDI配置的,具有受限制的数据库用户,可以将DML转换为表,但不能使用DDL。 正如您可能猜到的那样,该用户不是这些表的所有者,但他被授予了访问权限。 假设他是GUEST_USER 该应用程序使用JPA + EclipseLink,并且已经定义了许多实体。 我不想在每个实体类中写入更改模式的属性。 我已经尝试过使用此代码的SessionCustomizer。 public class MyCustomizer implements SessionCustomizer{ @Override public void customize(Session session) throws Exception { session.executeNonSelectingSQL(“ALTER SESSION SET CURRENT_SCHEMA = OWNERS_SCHEMA”); } } 似乎有一些未初始化的东西,我得到一个空指针exception,我甚至不确定这是否是在使用它们之前更改连接的模式的方法。 任何样品或想法? 在此先感谢您的帮助!

java.lang.ClassNotFoundException:JPA找不到javax.persistence.Persistence

我正在使用JPA API。 我收到了一个错误 java.lang.ClassNotFoundException: javax.persistence.Persistence cannot be found 我的代码如下: EntityManagerFactory emf; emf = Persistence.createEntityManagerFactory(“mail”); EntityManager em = emf.createEntityManager(); Query query = em.createQuery(“SELECT v FROM Version v”); List versions = query.getResultList(); 行emf = Persistence.createEntityManagerFactory(“mail”); 有解决方案吗

JPA GenerationType.AUTO没有考虑具有自动增量的列

我有一个表与一个简单的int id列在SQL Server中具有标识自动增量。 实体的Id使用@Id和@GeneratedValue注释 @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = “id”, length = 4, precision = 10, nullable = false) private Integer id; 在SQL Server中,该列已正确设置为Identity with Seed , Increment等于1。 当我尝试持久化该实体的实例时,Hibernate尝试查询hibernate_sequence表以获取ID值。 由于我没有在我的架构中创建该表,因此出现错误: could not read a hi value: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name ‘MySchema.hibernate_sequence’ 如果我将生成类型更改为IDENTITY,一切都按预期工作 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = “id”, length = 4, precision = […]

Oracle上的Hibernate:将String属性映射到CLOB列

警告 :请参阅下面的答案。 问题是由10.2.0.4之外的类路径中存在的旧Oracle驱动程序引起的。 问题解决了。 留下这个问题的其余部分给后人。 我一直在抨击下面的事情。 这是从我的应用程序代码中提取的简单POJO: @Entity @Table(name = “PIGGIES”) public class Piggy { private Long id; private String description; public Piggy() {} @Id @GeneratedValue @Column(name = “PIGGY_ID”) public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Lob @Column(name = “PIGGY_DESCRIPTION”) public String getDescription() { return description; […]

如何在Tomcat中使用Hibernate支持的JPA运行Spring 3.0 PetClinic

好吧,这可能应该是世界上最简单的事情,但我一整天都在努力,而且它仍然无法工作..任何帮助都非常感谢! 编辑: 有关正确的程序,请参阅Pascal的答案。 我的错(因为我没有禁用LoadTimeWeaving)程序留待参考..: 我做了什么: 下载了Tomcat 6.0.26和Spring 3.0.1 从https://src.springframework.org/svn/spring-samples/petclinic下载了PetClinic 建立并部署了petclinic.war。 使用默认的JDBC持久性很好。 编辑了webapps / WEB-INF / spring / applicationContext-jpa.xml并将jpaVendorAdaptor设置为Hibernate。 编辑了webapps / WEB-INF / web.xml,并将context-param从applicationContext-jdbc.xml更改为applicationContext-jpa.xml 将Spring 3.0.1发行版中的所有内容复制到TOMCAT_HOME / lib。 推出了tomcat。 锯 引起:java.lang.IllegalStateException:ClassLoader [org.apache.catalina.loader.WebappClassLoader]不提供’addTransformer(ClassFileTransformer)’方法。 指定自定义LoadTimeWeaver或使用Spring的代理启动Java虚拟机:-javaagent:spring-agent.jar webapps / META-INF / context.xml中未注释的行 。 同样的错误。 将该行添加到TOMCAT_HOME / context.xml 部署没有错误。 但是,当我做某事时会发出错误说 java.lang.NoClassDefFoundError: javax/transaction/SystemException at org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:39) 11.根据scaffman的建议,将javax.transaction的范围从测试更改为默认(刚删除的测试)。 12.Run很好!! 谢谢!

是否可以将JPA注释添加到超类实例变量中?

我正在为两个不同的表创建相同的实体。 为了使两个实体的表映射等不同,但只将其余的代码放在一个地方 – 一个抽象的超类。 最好的方法是能够在超类中注释诸如列名之类的通用内容(因为它们将是相同的),但这不起作用,因为JPA注释不是由子类inheritance的。 这是一个例子: public abstract class MyAbstractEntity { @Column(name=”PROPERTY”) //This will not be inherited and is therefore useless here protected String property; public String getProperty() { return this.property; } //setters, hashCode, equals etc. methods } 我想inheritance并仅指定特定于子项的内容,例如注释: @Entity @Table(name=”MY_ENTITY_TABLE”) public class MyEntity extends MyAbstractEntity { //This will not work since this field does […]