Tag: eclipselink

JPA – 使用EclipseLink保持单向一对多关系失败

我试图坚持一个非常简单的单向一对多关系,但EclipseLink(2.3.1)失败了。 服务类(父母): @Entity @Table(name = “tbl_service2″) public class Service implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name=”service_id”) public long serviceID; @Column(name=”name”) public String name; @OneToMany(cascade={CascadeType.ALL}) @JoinColumn(name=”service_id”, referencedColumnName=”service_id”) public Set parameters; } 参数类(子): (当然在数据库中有“service_id”外键字段,它没有在类中表示,因为它是单向关系)。 @Entity @Table(name = “tbl_service_parameters2″) public class Parameter implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name=”param_id”) public long parameterID; @Column(name=”name”) public String name; […]

在JPA查询中使用CURRENT_DATE的示例

有人能指出我如何在JPA查询中使用CURRENT_DATE的示例吗? CURRENT_DATE在JPA中指定,但我无法使其工作。 我总是得到unexpected token [CURRENT_DATE]exception。 由于JPA中规定了所有提供商都应该遵守它吗? 我正在使用EclipseLink 2.0 BTW。

JPA多对多坚持加入表

我有两张表与多对多的关系。 当我持久化用户没有插入任何东西来连接表时,我映射了这两个实体。 我正在调试直到持久化,我看到组列表不为空。 Ther是没有错误信息只是坚持用户。 用户用户组组 我使用的是netbeans 7.3,Glassfish 3.1.2.2,postgresql 9.1和eclipselink 2 另外,我试图显示sql脚本,下面的属性对我不起作用。 Abstact DAO: public abstract class GenericDAO implements Serializable{ @PersistenceContext EntityManager entityManager; public void persist(E object){ entityManager.persist(object); } public void merge(E object){ entityManager.merge(object); } public void delete(E object){ object = entityManager.merge(object); entityManager.remove(object); } } 用户实体: @Entity @Table(name = “users”) @XmlRootElement @NamedQueries( { @NamedQuery(name = “Users.findAll”, […]

EclipseLink MOXy JSON序列化

我有一个示例课程: class Zoo { public Collection animals; } 当使用MOXy序列化时,我得到: { “bird”: [ { “name”: “bird-1”, “wingSpan”: “6 feets”, “preferredFood”: “food-1” } ], “cat”: [ { “name”: “cat-1”, “favoriteToy”: “toy-1” } ], “dog”: [ { “name”: “dog-1”, “breed”: “bread-1”, “leashColor”: “black” } ] } 为什么它使用数组指示符“[]”,而鸟,猫和狗不是数组? 第二,有没有办法摆脱“鸟”,“猫”和“狗”? 换句话说,我试图去: { { “name”: “bird-1”, “wingSpan”: “6 feets”, “preferredFood”: “food-1” […]

如何获取任何JPA实体的主键?

对于每个@Entity,我需要执行以下操作: public boolean insert(final Entity entity){ if (em.find(entity.getClass(), entity.getId()) == null) { et.begin(); em.persist(entity); et.commit(); return true; } return false; } 如果实体不存在,那就是该实体持续存在,并知道它是否存在。 有了实体,我正试图到达@Entity,虽然我意识到这不是inheritance关系。 我可以用什么类来引用每个JPA实体? 我可以创建一个接口/抽象类MyEntities并让所有这些inheritance,但是这样吗? 我希望减少代码。 此外,当我尝试使用.getId()时,我希望能够提取每个实体的主键。

EclipseLink JPA` @ PreUpdate`调用不会持久化

我在StackOverflow上遇到了一些类似的问题,尝试了解决方案,但没有找到答案。 我使用相当常见的JPA策略来设置某些实体的最后修改时间。 设置列和字段,然后使用@PreUpdate标记方法,并将它们设置为等于当前时间。 问题是我可以在调试器中看到正在调用该方法并且该字段正在更新,但是在我的数据库日志中,我只看到一个SQL调用来更新更改的字段,该字段不包含时间戳字段的UPDATE 。 让@PrePersist更加复杂,只有@PreUpdate解决这个问题。 到目前为止,我发现的最接近的解释是在这个LINK 。 类似的问题:#1725699和#1745890 我使用EclipseLink v2和JPA v1与GlassFish v2兼容。 我尝试直接在Entity类中的方法上使用两个注释,以及使用@EntityListener注释附加到Entity类的EntityListener 。 我怀疑这是EclipseLink中的一个错误,但我无法certificate这一点。 错误与否我非常希望这个简单的操作工作。 这个实现有什么问题吗? 这是EclipseLink中的已知问题吗? 这是JPA中的已知问题吗? 有没有解决的办法? 如果没有进入数据库并使用触发器,是否有另一条路径让我的Java代码设置updated_on时间戳? 感谢您的建议! 代码片段如下。 实体字段: @Column(name = “updated_on”) @Temporal(TemporalType.TIMESTAMP) private Date updatedOn; @Column(name = “created_on”) @Temporal(TemporalType.TIMESTAMP) private Date createdOn; 带注释的更新方法: @PreUpdate public void setUpdatedOn(Timestamped object) { object.setUpdatedOn(new Date()); } @PrePersist public void setCreatedOn(Timestamped object) { […]

首次连接数据库时,NullPointer在日志中

我第一次使用createEntityManager()连接到数据库时,在tomcat的控制台上出现NullPointerException 。 我在用: apache tomcat 8.0.24 eclipselink 2.6.1-RC1(JPA间接使用) sqlite jdbc 3.8.10.1 日志消息如下: [EL Warning]: connection: 2015-08-21 16:01:51.569–java.lang.NullPointerException [EL Info]: 2015-08-21 16:01:51.585–ServerSession(29156874)–EclipseLink, version: Eclipse Persistence Services – 2.6.1.v20150605-31e8258 [EL Info]: connection: 2015-08-21 16:01:52.365–Not able to detect platform for vendor name [SQLite33.8.10.1]. Defaulting to [org.eclipse.persistence.platform.database.DatabasePlatform]. The database dialect used may not match with the database you are […]

EclipseLink 2.7.0和JPA API 2.2.0 – 签名不匹配

运行由maven构建的具有以下依赖项的项目时: org.eclipse.persistence javax.persistence 2.2.0 org.eclipse.persistence eclipselink 2.7.0 我在运行时收到以下错误: java.lang.SecurityException: class “javax.persistence.Cacheable”‘s signer information does not match signer information of other classes in the same package javax.persistence-2.2.0工件已签名并包含javax.persistence.Cacheable.class注释,而eclipselink-2.7.0工件未签名且包含相同的java类注释。 怎么解决这个问题? 编辑 用版本2.1.1替换javax.persistence工件版本2.2.0修复了问题(这个没有签名),但我不确定这是正常情况。

是否可以为JPA编写通用枚举转换器?

我想为JPA编写一个转换器,将任何枚举存储为UPPERCASE。 我们遇到的一些枚举不遵循惯例只使用大写字母,所以在重构之前我仍然存储未来值。 到目前为止我得到了什么: package student; public enum StudentState { Started, Mentoring, Repeating, STUPID, GENIUS; } 我希望“已启动”存储为“已启动”等等。 package student; import jpa.EnumUppercaseConverter; import javax.persistence.*; import java.io.Serializable; import java.util.Date; @Entity @Table(name = “STUDENTS”) public class Student implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = “ID”) @GeneratedValue(strategy = GenerationType.IDENTITY) private Long mId; @Column(name = […]

如何在JPA中使用Postgres JSONB数据类型?

我没有找到使用JPA(EclipseLink)从PostgreSQL映射JSON和JSONB数据类型的方法。 有人使用JPA的这种数据类型,可以给我一些有用的例子吗?