Tag: eclipselink

没有运算符匹配给定的名称和参数类型。 您可能需要添加显式类型转换。 – Netbeans,Postgresql 8.4和Glassfish

我正在尝试使用EclipseLink在Glassfish中使用JPA编辑Postgresql中的表。 当我插入一个实体时,它运行正常。 但是,当我尝试编辑或删除同一个实体时,它会因以下错误而失败。 任何想法? 引起:Exception [EclipseLink-4002](Eclipse Persistence Services – 2.0.1.v20100213-r6600):org.eclipse.persistence.exceptions.DatabaseException 内部exception:org.postgresql.util.PSQLException:错误:运算符不存在:整数=字符变化 提示:没有运算符匹配给定的名称和参数类型。 您可能需要添加显式类型转换。 职位:38 错误代码:0 at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processExceptionForCommError(DatabaseAccessor.java:1422) at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:799) 在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:867) 在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:587) 在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530) at org.eclipse.persistence.internal.sessions.AbstractSession.executeCall(AbstractSession.java:914) 在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:205) 在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:191) 在org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.deleteObject(DatasourceCallQueryMechanism.java:182) 在org.eclipse.persistence.internal.queries.StatementQueryMechanism.deleteObject(StatementQueryMechanism.java:101) at org.eclipse.persistence.queries.DeleteObjectQuery.executeDatabaseQuery(DeleteObjectQuery.java:167) 在org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:675) 在org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:589) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:109) at org.eclipse.persistence.queries.DeleteObjectQuery.executeInUnitOfWorkObjectLevelModifyQuery(DeleteObjectQuery.java:112) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:86) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2857) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225) 在org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1167) at org.eclipse.persistence.internal.sessions.CommitManager.deleteAllObjects(CommitManager.java:297) at org.eclipse.persistence.internal.sessions.CommitManager.deleteAllObjects(CommitManager.java:256) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1406) at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.commitToDatabase(RepeatableWriteUnitOfWork.java:547) […]

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,我甚至不确定这是否是在使用它们之前更改连接的模式的方法。 任何样品或想法? 在此先感谢您的帮助!

使用JpaSpecificationExecutor时使用QueryHint

我使用spring数据和JpaSpecificationExecutor::findAll方法来获取我的模型。 调用此方法时如何使用查询提示? 上面的源代码工作正常但我不能为我的JPA提供程序设置QueryHint(在我的例子中是EclipseLink)。 @Repository public interface ProductRepository extends JpaRepository, JpaSpecificationExecutor { } @Service public class ProductService { @Autowired private ProductRepository productRepository; public List findByTitle(String locale, String titleToSearch) { return productRepository.findAll((Root root, CriteriaQuery query, CriteriaBuilder builder) -> { return builder.equal(builder.function(“jsonb_extract_path_text”, String.class, root.get(“title”), builder.literal(locale)), titleToSearch); }); } } 我使用spring-data使用Query Hints的方法如上, @Repository public interface ProductRepository extends JpaRepository, JpaSpecificationExecutor […]

为什么这个流没有返回元素?

我尝试将以下代码编写为流: AbstractDevice myDevice = null; for (AbstractDevice device : session.getWorkplace().getDevices()) { if (device.getPluginconfig().getPluginType().getId() == 1) { myDevice = device; } } 这段代码工作正常。 但是当我像这样重写它时它不再起作用了: myDevice = session.getWorkplace().getDevices().stream() .filter(s -> s.getPluginconfig().getPluginType().getId() == 1) .findFirst().get(); 我从流中返回的Optional没有值。 为什么? 编辑 当我尝试这个时(我仍然从getDevices()获得两个设备): List testList = session.getWorkplace().getDevices() .stream().collect(Collectors.toList()); testList为空。 所以我的设备List流似乎出了问题? 它是一个JavaEE应用程序,我从相应的实体获取我的设备: @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) @JoinTable(name = “Workplace_AbstractDevice”, joinColumns = { […]

Java8 Collections.sort(有时)不会对JPA返回的列表进行排序

Java8在我的JPA EclipseLink 2.5.2环境中继续做一些奇怪的事情。 我不得不删除问题https://stackoverflow.com/questions/26806183/java-8-sorting-behaviour昨天,因为在这种情况下的排序受到奇怪的JPA行为的影响 – 我通过强制执行该方法找到了解决方法在进行最终排序之前的第一个排序步骤。 仍然在Java 8中使用JPA Eclipselink 2.5.2,以下代码有时不在我的环境中排序(Linux,MacOSX,都使用build 1.8.0_25-b17)。 它在JDK 1.7环境中按预期工作。 public List getDocumentsByModificationDate() { List docs=this.getDocuments(); LOGGER.log(Level.INFO,”sorting “+docs.size()+” by modification date”); Comparator comparator=new ByModificationComparator(); Collections.sort(docs,comparator); return docs; } 从JUnit测试调用时,上述函数正常工作。 在生产环境中进行debbuging时,我会得到一个日志条目: INFORMATION: sorting 34 by modification date 但在TimSort中,nRemaining <2的返回语句被命中 – 因此不会发生排序。 JPA提供的IndirectList(请参阅jpa返回的集合? )被认为是空的。 static void sort(T[] a, int lo, int hi, Comparator c, […]

使用JPA EntityManager批量插入

有没有办法我们可以使用JPA EntityManager使用批量插入。 我知道没有直接的方法来实现这一目标,但必须有一些方法来实现这一机制。 实际上,对于每次插入操作,它需要300毫秒,我希望使用批量插入而不是单个插入来减少。 这是我目前正在为单个插入执行的代码 @PersistenceContext(unitName = “testing”) EntityManager eM; Query querys = this.eM.createNativeQuery(insertQuery); for (String s : someList) { //setting parameters querys.executeUpdate(); } 提前致谢。

在JPA / JAX-RS Web服务中validationJAXBElement

我有一个JAX-RS webservice(Jersey),它是JPA(EclipseLink)实体的CRUD接口。 我的实体是从数据库表中自动生成的,我用JAXB注释对它们进行了注释,以便它们可以编组/解组到XML。 我的资源方法将JAXBElement对象作为必需的参数。 我没有XSD,但是,我愿意写一个来validation请求中收到的XML。 但是,我不知道如何启动validation。 Jersey自动处理编组/解组,我发现的有关validation的任何参考都是在该级别完成的。 有人知道一个示例/教程,说明如何做到这一点? 谢谢!