繁体   English   中英

jpa,使用非法命名查询的风险?

[英]jpa, risks of using an illegal named query?

我做了一个可以工作的NamedQuery,但是我在Eclipse中有多个错误标记。 现在我的查询可能不合法,对此的回答(请参阅评论)告诉我,无法执行我打算在jpa中执行的操作。 因此,由于无论如何我都设法做到了,但是我真的不知道它为什么起作用:我的问题是使用它的潜在风险是什么:

query = "SELECT t FROM Thethread t LEFT JOIN FETCH t.threadVotes tv ON tv.user1=:currentUser ORDER BY t.datePosted DESC"

下开:

JOIN FETCH表达式不能用标识定义

在:currentUser下:

输入参数只能在查询的WHERE子句或HAVING子句中使用。

没有它,我无法获得想要的结果。 这是:

  • 获取最新的Thethread
  • 在其集合中获得当前用户的投票。

如果您知道该怎么做,请成为我的客人。

实体是这样的:

public class Thethread implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long idthread;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "date_posted")
    private Date datePosted;

    private int downvotes;

    private int upvotes;

    // bi-directional many-to-one association to ThreadVote
    @OneToMany(mappedBy = "thethread")
    private List<ThreadVote> threadVotes;
    }

public class ThreadVote implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "id_votes_thread")
    private int idVotesThread;

    private int vote;

    // bi-directional many-to-one association to Thethread
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "thread")
    private Thethread thethread;

    // bi-directional many-to-one association to User
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "from_user")
    private User user1;
    }

根据JPA 2.1(JavaEE 7),您的查询是正确的JPQL。 Eclipselink支持它,并且其他提供程序也应支持,如果它们支持JPA的2.1版本。 此最新JPA版本中的JOIN运算符是新的,JPA 2.0(JavaEE 6)和较旧的JPA 1版本均未提供。

这是EclipseLink Wiki的更多信息。 Wiki声明Eclipselink实现ON运算符,并且它在JPA 2.1草案中。 我还检查了它是否也符合最终的JPA 2.1规范-并且在那里。

为了使用您的查询,您只需要确保您的环境/应用服务器支持JPA 2.1(例如,应用服务器应支持Java EE 7,例如Glassfish 4或WildFly 8+)。

在查询工作之前,IDE(Eclipse)发出警告是没有问题的。 Eclipse可能不支持JPA 2.1语法,或者您的项目必须以某种方式配置为支持JPA 2.1,而不是较旧的JPA版本。 尝试查看项目方面下的项目属性,并确保您拥有版本2.1中的JPA

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM