本文将带您了解关于如何使用JPA设置Eclipselink?的新内容,同时我们还将为您解释eclipsejpaprojectchange的相关知识,另外,我们还将为您提供关于eclipse构建jpap
本文将带您了解关于如何使用JPA设置Eclipselink?的新内容,同时我们还将为您解释eclipse jpa project change的相关知识,另外,我们还将为您提供关于eclipse 构建 jpa project 所需的用户库(vendor: EclipseLink)、EclipseLink JPA`@ PreUpdate`调用不持久、EclipseLink JPA继承(不包含鉴别符)列、Hibernate或EclipseLink for JPA?[关闭]的实用信息。
本文目录一览:- 如何使用JPA设置Eclipselink?(eclipse jpa project change)
- eclipse 构建 jpa project 所需的用户库(vendor: EclipseLink)
- EclipseLink JPA`@ PreUpdate`调用不持久
- EclipseLink JPA继承(不包含鉴别符)列
- Hibernate或EclipseLink for JPA?[关闭]
如何使用JPA设置Eclipselink?(eclipse jpa project change)
该EclipseLink的文件说,我需要在我的pom.xml与Maven得到它下面的条目:
<dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.0.0</version> <scope>compile</scope> ... </dependency><dependencies> ...<repositories> <repository> <id>EclipseLink Repo</id> <url>http://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/rt/eclipselink/maven.repo</url> </repository> ...</repositories>
但是当我尝试使用@Entity
注释时,NetBeans告诉我,找不到该类。确实如此:Eclipselink的javax.persistence包中没有Entity类。
我必须如何使用Maven设置Eclipselink?
答案1
小编典典该eclipselink
工件不提供JPA 2.0 API ,您需要添加javax.persistence
:
<repositories> <repository> <id>eclipselink</id> <url>http://www.eclipse.org/downloads/download.php?r=1&nf=1&file=/rt/eclipselink/maven.repo/</url> </repository></repositories><dependencies> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.0.0</version> <scope>provided</scope><!-- since I''m running inside a Java EE container --> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>2.0.0</version> <scope>provided</scope><!-- since I''m running inside a Java EE container --> </dependency> ...
为了简单起见,我建议使用非OSGI EclipseLink jar。
eclipse 构建 jpa project 所需的用户库(vendor: EclipseLink)
Eclipse 构建 JPA Project 时,需要指定 JPA 的实现,如:下图中的 EclipseLink 2.7.3,这其实是一个自定义的用户库。
看看,这个用户库包含 persistence 接口和 eclipselink 提供的实现。
上述的用户库包含的 jar 包都在下面的压缩包中:
EclipseLink_2.7.3.rar
附:
不过,我更喜欢直接用 maven 依赖更简单快捷。
<project ...>
...
<dependencies>
...
<!-- jpa-api, persistence interface -->
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.2.1</version>
</dependency>
<!-- jpa-impl, eclipselink vendor -->
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.7.3</version>
</dependency>
...
</dependencies>
</project>
EclipseLink JPA`@ PreUpdate`调用不持久
我在StackOverflow上遇到了类似的问题,尝试了解决方案,但没有找到答案。
我正在使用一种相当通用的JPA策略来设置某些实体的上次修改时间。设置列和字段,然后使用标记方法,@PreUpdate
并将其设置为等于当前时间。
问题是,我可以在调试器中看到正在调用该方法并且该字段正在更新,但是在我的数据库日志中,我仅看到一个SQL调用,以UPDATE更改字段,其中不包含timestamp字段的UPDATE。
。
使事情复杂化还@PrePersist
可以完美地完成工作,仅@PreUpdate
体现这种行为。
到目前为止,我找到的最接近的解释是此LINK。
类似问题在#1725699和#1745890
我正在使用EclipseLink v2和JPA v1来与GlassFish v2兼容。
我尝试直接在Entity类的方法上使用这两个注释,以及使用注释EntityListener
附加到Entity类的方法@EntityListener
。
我怀疑这是EclipseLink中的错误,但我无法证明这一点。
是否出错我非常希望这个简单的操作能够正常工作。这个实现有什么问题吗?这是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) {
if (object.getCreatedOn()==null) {
object.setCreatedOn(new Date());
}
}
EclipseLink JPA继承(不包含鉴别符)列
我有一个Client和Affiliate类,它是从Person类继承的。正在使用联接的继承策略类型-
它们中的每一个都与父类共享主键。由于没有鉴别符列,我们选择使用DescriptorCustomizer和ClassExtractor。但是它并没有真正让人们知道它是如何工作的,而且代码似乎也没有编译。如果有人给出一个带有代码片段的漂亮示例以供理解,那将是很好的。
答案1
小编典典根据上述文档:
如果要映射到现有数据库,并且表没有区分符列,您仍然可以使用
@ClassExtractor
注释或<class-extractor>
元素定义继承
。类提取器采用实现ClassExtractor
接口的类。此类的实例用于确定要用于数据库行的类类型。类提取器必须定义一个extractClassFromRow()
采用数据库Record
和的方法Session
。
我们需要使用类提取器定义的用户注释层次结构中的根实体:
@Entity@Inheritance(strategy = InheritanceType.JOINED)@ClassExtractor(PersonClassExtractor.class)public abstract class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; private String name; private int age; // ...}
请注意,我们不使用@Customizer
注释,因为在JOINED
继承策略的情况下这不是必需的:
如果将类提取器与
SINGLE_TABLE
继承一起使用,则必须能够在查询中过滤类类型的行。这可以通过为分支类设置onlyInstancesExpression()
或
来实现withAllSubclassesExpression()
。可以使用设置这些Expression
对象DescriptorCustomizer
。
类提取器必须能够确定并从数据库行返回类类型。通常,我们需要替换一个鉴别符列,即
- 列名对于给定的实体类型是唯一的
- 基于根实体给定列的值的条件
假设层次结构中的每个继承实体类型都有一个具有唯一名称的列:
@Entitypublic class Client extends Person { @Column(name = "CLIENT_SPECIFIC") private String clientSpecific; // ...}@Entitypublic class Affiliate extends Person { @Column(name = "AFFILIATE_SPECIFIC") private float affiliateSpecific; // ...}
那么类提取器可能如下所示:
public class PersonClassExtractor extends ClassExtractor { @Override public Class<?> extractClassFromRow(Record databaseRow, Session session) { if (databaseRow.containsKey("CLIENT_SPECIFIC")) { return Client.class; } else if (databaseRow.containsKey("AFFILIATE_SPECIFIC")) { return Affiliate.class; } else { return Person.class; // this should never happen } }}
检索客户和会员列表
List
polymorphicResults = em.createQuery(“SELECT p FROM Person p”)
.getResultList();分别检索会员或客户列表
List
concreteResults = em.createQuery(“SELECT a FROM Affiliate a”)
.getResultList();List
concreteResults = em.createQuery(“SELECT c FROM Client c”)
.getResultList();
Hibernate或EclipseLink for JPA?[关闭]
我想知道是否有人对这些框架的JPA2.0实现有经验?特别是与带有EclipseLink支持的Spring3.x一起使用。
您是否使用任何这些框架和JPA2.0进行生产?有什么 严重的 问题吗?
答案1
小编典典恕我直言,总是尽可能使用标准的api。您自己的示例完美地展示了这一点。当一个提供商无法按预期工作时,您可以在两个提供商上尝试使用相同的代码。切换到任何本机API都会阻止您执行此操作。
如果将EclipseLink用作JPA
2.0提供程序对您来说效果很好,请使用它。如果您确实碰巧遇到问题,请提交EclipseLink错误,并在该论坛或EclipseLink论坛和新闻组上获取帮助。
我们今天的关于如何使用JPA设置Eclipselink?和eclipse jpa project change的分享就到这里,谢谢您的阅读,如果想了解更多关于eclipse 构建 jpa project 所需的用户库(vendor: EclipseLink)、EclipseLink JPA`@ PreUpdate`调用不持久、EclipseLink JPA继承(不包含鉴别符)列、Hibernate或EclipseLink for JPA?[关闭]的相关信息,可以在本站进行搜索。
本文标签: