Tag: eclipselink

如何使用JPA / EclipseLink与Junction Table建立多对多关系

我有2张桌子: 电影:movieID 用户:userID 这些表通过Queue表具有多对多的关系,并具有一个附加属性listOrder: 队列:movieID,userID,listOrder 我正在尝试使用EclipseLink对此进行建模,但是我遇到了“不兼容的映射”错误。 以下是我的代码示例: @Entity @Table(name=”movieinventory”) public class Movie implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private Integer movieID; @OneToMany(mappedBy=”movie”) private Set moviesInQueue; …Getters/Setters… } @Entity @Table(name=”Users”) public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private Integer userID; @OneToMany(mappedBy=”user”) private […]

EclipseLink – 双向OneToMany关系

假设我有两个实体: @Entity public class Customer implements Serializable { … @OneToMany(cascade=ALL, mappedBy=”customer”) public Set getOrders() { return orders; } … } @Entity public class Order implements Serializable { … @ManyToOne @JoinColumn(name=”CUST_ID”, nullable=false) public Customer getCustomer() { return customer; } … } 然后,我是持久的Customer实体,之后,Order实体参考之前添加的Customer。 当我从数据库中检索此客户并调用getOrders时,它返回空集。 这是正常的行为吗? 如果是,我在添加新订单实体时如何自动刷新此设置?

使用jpa从postgres读取byte 时,长度几乎翻倍

我有一个Image类,它有一个byte []来包含实际的图像数据。 我能够在我的webapp上上传和插入图像。 当我从JPA读取图像后尝试显示图像时,我的byte []的长度总是2x-1或2x-2,其中x是postgres 9中bytea字段的长度。显然浏览器不会显示图像说它已损坏。 我可以用一些帮助来弄清楚为什么我得到(大约)两倍的预期。 这是我的图像类的映射。 使用eclipselink和JPA 2在Mac上击中postgres 9。 当我从数据库中选择时 select *, length(bytes) from image; 我的长度为9765.在我的控制器的断点中,byte []长度为19529,这比数据库中的两倍差。 @Entity @Table( name = “image” ) @SequenceGenerator( name = “IMAGE_SEQ_GEN”, sequenceName = “IMAGE_SEQUENCE” ) public class Image extends DataObjectAbstract { @Id @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = “IMAGE_SEQ_GEN” ) private Long key; @Column( name=”content_type” ) private […]

在EclipseLink中为每个连接设置DB Session级别参数?

我想为Eclipselink的每个会话设置一个数据库会话变量。 我想要执行的SQL是这样的: begin DBMS_SESSION.SET_IDENTIFIER(‘MyApplicationName’); end; 如果我尝试创建一个将执行命令的SessionEvent侦听器,我似乎陷入无限递归。 myServer.getEventManager().addListener(new SessionEventAdapter() { public void postConnect(SessionEvent evt) { evt.getSession().executeNonSelectingCall(new SQLCall(“begin DBMS_SESSION.SET_IDENTIFIER(‘MyApplicationName’); end;”)); } }); 我是否以错误的方式使用事件监听器或者SQL命令是否需要以特殊方式执行?

延迟加载不适用于eclipselink中的ManyToOne

地址与人有多对一的关系,如: 人: @Id @Column(name=”personid”) private Long personId; private String firstName; private String lastName; private String email; @OneToMany(cascade = CascadeType.ALL,mappedBy=”person”,targetEntity=Address.class,fetch=FetchType.LAZY) private List addressArray=new ArrayList(); public Person() { } 和地址: @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name=”personId”) private Person person; 我想从地址对象访问人的名字,如“address.person.firstname”,但它总是急于加载这个人? 我也尝试使用maven静态编织它我的pom.xml包含: maven-antrun-plugin process-classes run 还在persistence.xml中添加了 我也试过动态编织,但它给出了exception: java.lang.reflect.InvocationTargetException 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:601) at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:382) at […]

Eclipselink扩展了JOIN子句

目前的代码: CriteriaQuery criteriaQuery = cb.createQuery(MinutisPreke.class); Root from = criteriaQuery.from(MinutisPreke.class); Join ld = from.join(“lankomumasDiena”, JoinType.LEFT); cb.and(cb.equal(ld.get(“intervalas”), 7)); 生成以下查询: SELECT COUNT(t0.pr_id) FROM preke AS t0 LEFT OUTER JOIN lankomumas AS t1 ON (t1.pr_id = t0.pr_id) WHERE (t1.intervalas = 7) 如何使用条件查询在LEFT OUTER JOIN ON子句中添加语句,以便我的代码生成此查询: SELECT COUNT(t0.pr_id) FROM preke AS t0 LEFT OUTER JOIN lankomumas AS t1 ON (t1.pr_id […]

为什么编译器无法识别元模型属性?

java se 6项目是否支持eclipselink jpa2的标准api? 如果没有,那就是我的问题。 我是否需要在persistence.xml中为条件api指定任何特殊内容? 这是我的标准查询: final EntityType Meaning_ = em.getMetamodel().entity(Meaning.class); final CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Integer.class); final Root meng = cq.from(Meaning.class); cq.where(meng.get(Meaning_.lastPublishedDate)); //this attributes are not recognized/found cq.select(meng.get(Meaning_.objId)); // ” ” TypedQuery q = em.createQuery(cq); return q.getResultList(); 这是我的意义实体: @Entity public class Meaning implements Serializable{ private static final long serialVersionUID = […]

使用@OneToMany Map的EclipseLink JPA“此上下文中的无效表”

我希望我在这里做些傻事…… 我正在尝试为Map设置JPA注释并获得以下堆栈跟踪。 Exception [EclipseLink-6069] (Eclipse Persistence Services – 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.QueryException Exception Description: The field [EMPLOYEE.PHONE_TYPE] in this expression has an invalid table in this context. Query: ReadAllQuery(name=”phones” referenceClass=Phone ) at org.eclipse.persistence.exceptions.QueryException.invalidTableForFieldInExpression(QueryException.java:739) at org.eclipse.persistence.internal.expressions.FieldExpression.validateNode(FieldExpression.java:281) at org.eclipse.persistence.expressions.Expression.normalize(Expression.java:3259) at org.eclipse.persistence.internal.expressions.DataExpression.normalize(DataExpression.java:369) at org.eclipse.persistence.internal.expressions.FieldExpression.normalize(FieldExpression.java:208) at org.eclipse.persistence.internal.expressions.SQLSelectStatement.normalize(SQLSelectStatement.java:1377) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.buildNormalSelectStatement(ExpressionQueryMechanism.java:546) at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.prepareSelectAllRows(ExpressionQueryMechanism.java:1700) at org.eclipse.persistence.queries.ReadAllQuery.prepareSelectAllRows(ReadAllQuery.java:721) at org.eclipse.persistence.queries.ReadAllQuery.prepare(ReadAllQuery.java:657) at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:614) at org.eclipse.persistence.queries.ObjectLevelReadQuery.checkPrepare(ObjectLevelReadQuery.java:883) at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:575) […]

合并@ManyToOne端的托管实体

下面给出了从Department到Employee的一对多关系。 部门(家长): @OneToMany(mappedBy = “department”, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List employeeList = new ArrayList(0); 员工(孩子): @JoinColumn(name = “department_id”, referencedColumnName = “department_id”) @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH}) private Department department; 合并一个托管实体(子),如下所示(在EJB中使用CMT), Employee employee = entityManager.find(Employee.class, 1L); employee.setDepartment(department); // department is supplied by a client. employee.setEmployeeName(“xyz”); entityManager.merge(employee); 不更新数据库表中相应的员工行。 仅当从Employee的子@ManyToOne关系中删除CascadeType.MERGE时才会发生这种情况。 为什么表中的行不会更新? […]

与Bean Validation API结合使用时,Hibernate不遵循JPA规范吗?

这个问题是对此问题的跟进: JPA ConstraintViolation vs Rollback 我做了一些关于JPA和validationAPI(JSR-303)组合的测试。 我在JPA规范中找到了以下内容(第101-102页): 默认情况下,默认Beanvalidation组(组默认值)将根据预先持久化和更新前的生命周期validation事件进行validation … 如果validate方法返回的ConstraintViolation对象集不为空,则持久性提供程序必须抛出包含对返回的ConstraintViolation对象集的引用的javax.validation.ConstraintViolationException,并且必须将事务标记为回滚。 我设置了以下测试: HibernateValidator作为JSR-303实现 2 PersistenceProvider Hibernate和EclipseLink 一个实体NameNotNullWithDefaultGeneratedStrategy ,其id使用默认策略( @Generated )和@NotNull String name列生成 另一个实体NameNotNullWithTableGeneratedStrategy其中包含使用表策略( @TableGenerated )和@NotNull String name列生成的id 测试尝试使用空name persist每个实体的一个实例。 预期的结果是由persist方法抛出的javax.validation.ConstraintViolationException和rollback only标记为rollback only的事务(即这些假设基于本文中引用的JPA规范)。 结果是: 使用eclipse链接作为提供者: persist方法为两个实体抛出javax.validation.ConstraintViolationException 。 rollback only在两种情况下,事务都标记为rollback only 以hibernate作为提供者: persist抛出javax.validation.ConstraintViolationException用于实体NameNotNullWithDefaultGeneratedStrategy +事务标记为rollback only NameNotNullWithTableGeneratedStrategy 不会为实体NameNotNullWithTableGeneratedStrategy +事务抛出任何exception而不会标记为rollback only 用于NameNotNullWithTableGeneratedStrategy commit因NameNotNullWithTableGeneratedStrategy失败 问题是: 它真的违反了JPA规范吗? 或者我错过了表格生成策略的特殊情况? 如果是违规行为:是否有任何与之相关的错误报告? 这是我测试的代码: package com.example.jpa.validator; […]