标签: jpa-2.0

JPA 2.0 API maven工件

我正在使用JPA 2.0,我的持久性提供程序是Hibernate; 但是,我想从javax中包含一个标准API,但在中心,没有2.0工件.我目前正在使用Hibernate JPA 2.0工件,但我想使用更标准的东西.

这可能吗?

谢谢,

沃尔特

maven-2 jpa-2.0

26
推荐指数
3
解决办法
2万
查看次数

JPA 2条件获取路径导航

使用JPA 2 Criteria Join方法,我可以执行以下操作:

    //Join Example (default inner join)
    int age = 25;
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<Team> c = cb.createQuery(Team.class);
    Root<Team> t = c.from(Team.class);
    Join<Team, Player> p = t.join(Team_.players);
    c.select(t).where(cb.equal(p.get(Player_.age), age));
    TypedQuery<Team> q = entityManager.createQuery(c);
    List<Team> result = q.getResultList();
Run Code Online (Sandbox Code Playgroud)

我怎么能用fetch方法做同样的事情,我期望Fetch接口有get路径导航方法,但它没有:

    //Fetch Join Example

    int age = 25;
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<Team> cq = cb.createQuery(Team.class);
    Root<Team> t = cq.from(Team.class);
    Fetch<Team,Player> p = t.fetch(Team_.players);
    cq.where(cb.equal(p.get(Player_.age), age)); //This leads to compilation error there is no such method get in interface Fetch …
Run Code Online (Sandbox Code Playgroud)

java jpa fetch jpa-2.0

26
推荐指数
4
解决办法
3万
查看次数

Hibernate 3.5中的@OrderColumn注释

我正在尝试使用@OrderColumnHibernate 3.5 的注释

@OneToMany(mappedBy = "parent",fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@OrderColumn(name = "pos")
private List<Children> childrenCollection;
Run Code Online (Sandbox Code Playgroud)

检索数据时,一切正常.但我不能让它重新排序列表中的元素并将新订单保存到数据库.

hibernate jpa one-to-many jpa-2.0

25
推荐指数
2
解决办法
5万
查看次数

如何使用JPA实现时态表?

我想知道如何使用EclipseLink在JPA 2中实现时态表.时间上我指的是定义有效期的表.

我面临的一个问题是引用表不再具有对引用表(时态表)的外键约束,因为引用表的性质现在它们的主键包括有效期.

  • 我如何映射我的实体的关系?
  • 这是否意味着我的实体不再与那些有效时间实体建立关系?
  • 我是否应该在某种服务或专门的DAO中手动执行初始化这些关系的责任?

我发现的唯一一件事就是一个名为DAO Fusion的框架来处理这个问题.

  • 有没有其他方法可以解决这个问题?
  • 您能否提供有关此主题的示例或资源(带有时态数据库的JPA)?

这是一个数据模型及其类的虚构示例.它起初是一个简单的模型,不需要处理时间方面:

第一种情景:非时间模型

数据模型: 非时态数据模型

团队:

@Entity
public class Team implements Serializable {

    private Long id;
    private String name;
    private Integer wins = 0;
    private Integer losses = 0;
    private Integer draws = 0;
    private List<Player> players = new ArrayList<Player>();

    public Team() {

    }

    public Team(String name) {
        this.name = name;
    }


    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQTEAMID")
    @SequenceGenerator(name="SEQTEAMID", sequenceName="SEQTEAMID", allocationSize=1)
    public Long getId() {
        return id;
    }

    public …
Run Code Online (Sandbox Code Playgroud)

java temporal-database eclipselink jpa-2.0

25
推荐指数
1
解决办法
1万
查看次数

Maven 3 - 如何添加注释处理器依赖?

我需要在项目的源代码上运行注释处理器.注释处理器不应该成为项目的传递依赖项,因为它只需要注释处理而不需要其他内容.

这是我用于此的完整(非工作)测试pom:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>test</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Test annotations</name>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <hibernate-jpamodelgen.version>1.2.0.Final</hibernate-jpamodelgen.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.0</version>
        <configuration>
          <annotationProcessors>
            <annotationProcessor>
              org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</annotationProcessor>
          </annotationProcessors>
          <debug>true</debug>
          <optimize>true</optimize>
          <source>1.6</source>
          <target>1.6</target>
          <compilerArguments>
            <AaddGeneratedAnnotation>true</AaddGeneratedAnnotation>
            <Adebug>true</Adebug>
          </compilerArguments>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>${hibernate-jpamodelgen.version}</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
</project>
Run Code Online (Sandbox Code Playgroud)

org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor在测试的插件配置中明确定义为注释处理器,我知道它不应该是必需的.

我遇到的问题是hibernate-jpamodelgen依赖项没有添加到编译器类路径中,因此找不到注释处理器并且构建失败.

根据这个答案,我尝试将依赖项添加为构建扩展(不确定我理解那些应该是什么!),如下所示:

<extensions>
  <extension>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jpamodelgen</artifactId>
    <version>${hibernate-jpamodelgen.version}</version>
  </extension>
</extensions>
Run Code Online (Sandbox Code Playgroud)

这也不会添加hibernate-jpamodelgen到编译器类路径中.

到目前为止,我发现唯一可行的方法是在该<dependencies>部分中将依赖项添加到项目中.这有一个令人遗憾的副作用,hibernate-jpamodelgen …

java maven-3 maven annotation-processing jpa-2.0

25
推荐指数
4
解决办法
4万
查看次数

有哪些现实世界的例子,更优选JPA2 Criteria API?

我已经看了JPA 2.0 Criteria API,但我发现它与Hibernate Criteria不同,太麻烦了.是否有充分的理由使用JPA 2.0 Criteria API而不是使用JPA-QL?感谢您的意见.

java hibernate jpa jpa-2.0

24
推荐指数
1
解决办法
1万
查看次数

使用HSQL内存数据库作为JPA数据源

我有一个内存数据源:

java.sql.Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:testdb", "sa", "");            
emf = Persistence.createEntityManagerFactory("manager");
Run Code Online (Sandbox Code Playgroud)

但是现在我被卡住了.我想将它用作J2SE应用程序中的JPA数据源.我已经浏览了整个网络,但所有信息都与J2EE有关.

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="manager">

        <jta-data-source>/*What to enter here?*/</jta-data-source>

        <properties>

            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />

        </properties>

    </persistence-unit>

</persistence>
Run Code Online (Sandbox Code Playgroud)

persistence hibernate jpa hsqldb jpa-2.0

23
推荐指数
1
解决办法
6万
查看次数

JPA为每个项目选择最新实例

假设我有一个会议实体.每次会议都有一位与会者和一个会面日期.在我的会议桌内,我可能会为每位与会者举行多次会议,每次会议的日期各不相同.我需要一个JPA查询,它只为所有与会者选择最新的会议.例如,如果我的表看起来像这样

Meeting ID | Attendee ID | Meeting Date
1          | 1           |  6/1/2011
2          | 2           |  6/1/2011
3          | 1           |  6/6/2011
4          | 3           |  6/6/2011
Run Code Online (Sandbox Code Playgroud)

我的结果应该是

Meeting ID | Attendee ID | Meeting Date
2          | 2           |  6/1/2011
3          | 1           |  6/6/2011
4          | 3           |  6/6/2011
Run Code Online (Sandbox Code Playgroud)

使用JPA 2对抗postgres.会议有1-1参加者和一个简单的时间戳日期.我怀疑我需要做一个小组by和max(blah),也许是一个加入我自己,但我不确定最好的方法来解决这个问题.

更新: 在晚上玩这个之后,我仍然没有可接受的JPQL解决方案.这是我到目前为止:

select m from Meeting m 
where m.meetingDate in 
    ( select max(meet.meetingDate) 
      from Meeting meet group by meet.attendee )
Run Code Online (Sandbox Code Playgroud)

我有其他与此问题无关的其他条件,例如由与会部门过滤等等.这有效的唯一原因是因为我们将会议日期跟踪到第二(或更精细),并且在同一时间召开两次会议的可能性很小.我们正在为它们添加一些Java内容,以便只为每个与会者提供最后一次会议,以防我们同时获得两个会议,但这是一个非常糟糕的解决方案.在查询中获取所有内容真的不应该太难,但我还没弄明白.

Update2:添加sql标签,因为如果我需要使用sql创建一个视图并创建一个JPA对象来映射到视图我就可以了.

java sql jpa jpql jpa-2.0

22
推荐指数
4
解决办法
3万
查看次数

如何使CriteriaBuilder加入自定义"on"条件?

我想使用CriteriaBuilder在我加入2个表的地方进行查询.在MySQL中,我想要的查询看起来像这样:

SELECT * FROM order
LEFT JOIN item
ON order.id = item.order_id
AND item.type_id = 1
Run Code Online (Sandbox Code Playgroud)

我想获得所有订单,如果他们有#1类型的商品,我想加入这个商品.但是,如果没有找到#1类型的项目,我仍然想要获得订单.我无法弄清楚如何使用CriteriaBuilder进行此操作.我所知道的是:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Order> cq = cb.createQuery(Order.class);
Root<Order> order = cq.from(Order.class);
Join<Order, Item> item = order.join(Order_.itemList, JoinType.LEFT);
Join<Item, Type> type = order.join(Item_.type, JoinType.LEFT);
cq.select(order);
cq.where(cb.equal(type.get(Type_.id), 1));
Run Code Online (Sandbox Code Playgroud)

此查询已中断,因为它在MySQL中产生类似的结果:

SELECT * FROM order
LEFT JOIN item
ON order.id = item.order_id
WHERE item.type_id = 1
Run Code Online (Sandbox Code Playgroud)

结果将只包含类型为#1的订单.没有订单被排除在外.如何使用CriteriaBuilder创建第一个示例中的查询?

jpa criteria-api jpa-2.0

22
推荐指数
1
解决办法
3万
查看次数

Eclipse bug:这个项目有JPA方面,但是没有创建JPA项目

重新启动Eclipse后,我的项目中出现以下错误:

该项目具有JPA方面,但不能创建JPA项目.有关详细信息,请参阅错误日志.

我所做的一切(清洁项目,maven更新等)都将摆脱错误.我的JPA内容图标仍然显示为灰色.

在此输入图像描述

看起来这是Eclipse错误中解决的错误 ......但是为什么我仍然得到它?我应该向Eclipse提交错误报告吗?

eclipse jpa-2.0

22
推荐指数
4
解决办法
3万
查看次数