Tag: eclipselink

具有空值的JPA复合主键

我有一个包含oracle数据库中客户数据的表。 这是一个简化的定义: CUSTOMER (CUSTOMER_ID NUMBER NOT NULL, SOURCE_SYSTEM VARCHAR2(30), FULL_NAME VARCHAR2(360), PHONE_NUMBER VARCHAR2(240) ) 该表的主键是(CUSTOMER_ID, SOURCE_SYSTEM) 。 该表有许多行, SOURCE_SYSTEM为null。 在数据库级别,没有问题,但是当我尝试通过JPA实体访问任何这些行时,它会导致许多问题: 1:使用em.find()获取具有空SOURCE_SYSTEM的行总是会返回null。 2:如果表中不存在记录,则使用em.merge()来插入具有空SOURCE_SYSTEM的行成功,但在后续更新时失败,因为合并ALWAYS会导致运行插入。 3:使用em.createQuery()显式查询具有null的行会导致以下exception: Exception [EclipseLink-6044] (Eclipse Persistence Services – 2.3.1.v20111018-r10243): org.eclipse.persistence.exceptions.QueryException Exception Description: The primary key read from the row [ArrayRecord( CUSTOMER.CUSTOMER_ID => 1 CUSTOMER.FULL_NAME => GUY PERSON CUSTOMER.PHONE_NUMBER => 555-555-1234 CUSTOMER.SOURCE_SYSTEM => null)] during […]

如何在eclipselink中访问多个租户?

eclipselink(或Hibernate)中的租户是将数据域彼此分开的一个很好的概念。 我正在使用eclipselink和单表策略。 有时需要从多个租户访问数据(例如,出于管理目的)。 有没有一个很好的方法来实现这一目标? (我不想通过所有租户来收集数据……) 例: @Entity @Multitenant @TenantDiscriminatorColumn(name = “TENANT”, contextProperty = “tenant.id”) public class TenantEntity { … 我可以使用参数化实体管理器访问特定租户中的对象: private static EntityManager newEntityManager(String tenant) { Map map = new HashMap(); map.put(“tenant.id”, tenant); return emf.createEntityManager(map); } 有没有方便的方法来查询所有租户? (或者是仅在单个租户中定义的持久对象的标识?)

初始化或不初始化JPA关系映射?

在一对多的JPA协会中,它被认为是初始化与空集合的关系的最佳实践? 例如。 @Entity public class Order { @Id private Integer id; // should the line items be initialized with an empty array list or not? @OneToMany(mappedBy=”order”) List lineItems = new ArrayList(); } 在上面的例子中,最好使用默认值为空的ArrayList来定义lineItems吗? 优缺点都有什么?

如何使用JPA设置Eclipselink?

Eclipselink文档说我需要在我的pom.xml中使用以下条目来获取Maven: org.eclipse.persistence eclipselink 2.0.0 compile … … EclipseLink Repo http://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/rt/eclipselink/maven.repo … 但是当我尝试使用@Entity注释时,NetBeans告诉我,该类无法找到。 事实上:Eclipselink的javax.persistence包中没有Entity类。 如何使用Maven设置Eclipselink?

在jpa / EclipseLink创建表后执行sql脚本?

在EclipseLink生成ddl后,是否有可能执行sql脚本? 换句话说,是否可能使用带有“drop-and-create-tables”的EclipseLink属性“eclipselink.ddl-generation”,并且EclipseLink在创建后执行另一个sql文件(将一些数据插入到刚创建的某些表中)表定义? 我正在使用带有GlassFish v3的EclipseLink 2.x和JPA 2.0。 或者我可以在项目调用的java方法(与ejb3的战争)部署中初始化表吗?

如何配置EclipseLink 2.0和Spring 3.0.5以及Tomcat 6?

我的Web应用程序使用Tomcat 6.0.18和Spring 3.0.5以及eclipselink 2.0.1和javax.persistence 2.0.0,SQL Server数据库。 我无法弄清楚配置,也无法找到具有此类配置的工作示例。 我尝试将loadTimeWeaver的属性添加到entityManagerFacotory中,但它在Spring 3中打破了AutoWired批注,如下面的applicationContext.xml中所示: 在appname-servlet.xml中: 但是当我禁用LoadTimeWeaver时,我的应用程序可以从JPA代码创建数据库,但无法将数据保存到数据库中。 false Persistence.xml com.generalform.eclipselink.model.Todo 如果您能指导我将EclipseLink集成到Spring 3和Tomcat中,我将非常感激。

使用JPA / EclipseLink / EJB从Java Web应用程序访问多个数据库

我构建了一个简单的SOAP java应用程序(服务器端),我正在使用Glassfish4,JPA/EclipseLink,EJB 。 我在Glassfish中设置了数据库连接(资源/池)。 请建议一些设计模式/知识,以便从单个应用程序中利用多个数据库。 创建多个持久性单元是多重访问的好主意吗? 或者还有其他优化的解决方案吗? 我有一个通用的数据库访问类。 public class GenericDAO { /* * private static final EntityManagerFactory emf = * Persistence.createEntityManagerFactory(“icanPU”); private EntityManager * em; */ /* * Persistence context is injected with following @PersistenceContext * annotation. This uses all persistence configurations as specified in the * persistence.xml. * * Note this kind of […]

如何在不触及目标表的情况下从JPA ManyToOne映射中检索外键?

我有以下两个用于构建图形的带注释的类: @Entity @Table(name = “Edge”) public class Edge { /* some code omitted for brevity */ @ManyToOne @JoinColumn(name = “ixNodeFrom”, nullable = false) private Node _nodFrom; @ManyToOne @JoinColumn(name = “ixNodeTo”, nullable = false) private Node _nodTo; /* some code omitted for brevity */ } @Entity @Table(name = “Node”) public class Node { /* some code […]

在JPA @GeneratedValue列中手动指定主键的值

我有一个具有主键/ id字段的实体,如下所示: @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; 这很好用。 我正在使用EclipseLink创建DDL-Schema,并且正确创建了这样的列: `id` bigint(20) NOT NULL AUTO_INCREMENT 但是,我有几个实体,我想要自己指定PK(这是​​一个将数据从旧数据库传输到我们正在构建的新数据库的小应用程序)。 如果我指定POJO的ID(使用setId(Long id) )并保持它,则EclipseLink 不保存它(即保存记录,但id由eclipseLink自动生成)。 有没有办法手动指定具有@GeneratedValue的列的值? 关于这个问题的一些想法: 我试图通过不使用@GeneratedValue解决问题,而只是手动将列定义为AUTO_INCREMENTed。 然而,这迫使我总是手动提供ID,因为EclipseLinkvalidation主键(因此它可能不是null,零或负数)。 exception消息显示我应该指定eclipselink.id_validation,但是这似乎没有任何区别(我注释了@PrimaryKey(validation = IdValidation.NONE)但仍然得到相同的消息)。 澄清一下:我使用EclipseLink(2.4.0)作为持久性提供程序,我无法切换它(项目的大部分依赖于eclipselink特定的查询提示,注释和类)。 编辑(回答答案): 自定义排序:我尝试实现自己的排序。 我尝试了inheritanceDefaultSequence,但是EclipseLink会告诉我Internal Exception: org.eclipse.persistence.platform.database.MySQLPlatform could not be found 。 但是我已经检查过了:这个类在类路径上。 所以我inheritance了另一个类NativeSequence: public class MyNativeSequence extends NativeSequence { public MyNativeSequence() { super(); } public MyNativeSequence(final String […]

有什么区别:使用JPA @TableGenerator的序列ID,@ GeneratedValue与数据库Auto_Increment

Q1。 :使用数据库中的序列ID应用有什么区别 一个。 CREATE TABLE Person ( id long NOT NULL AUTO_INCREMENT … PRIMARY KEY (id) ) 与 B. @Entity public class Person { @Id @TableGenerator(name=”TABLE_GEN”, table=”SEQUENCE_TABLE”, pkColumnName=”SEQ_NAME”, valueColumnName=”SEQ_COUNT”, pkColumnValue=”PERSON_SEQ”) @GeneratedValue(strategy=GenerationType.TABLE, generator=”TABLE_GEN”) private long id; … } 我的系统高度并发 。 由于我的数据库是Microsoft SQL服务器,我不认为它支持@SequenceGenerator ,因此我必须继续使用容易出现并发问题的@TableGenerator 。 Q2。 这里的链接( http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Advanced_Sequencing )表明B可能会遇到并发问题,但我不理解建议的解决方案。 如果有人能向我解释如何避免B的并发问题,我将不胜感激。 以下是他们解决方案的片段: If a large sequence pre-allocation size […]