如何用3个JOIN在JPA中编写SQL SELECT?

维克托里奥

我有实体:

@Entity(name = "sent_message")
public class SentMessage extends AbstractEntity {
    @ManyToOne(fetch = FetchType.LAZY)
    private TargetGroup targetGroup;
    @ManyToOne(fetch = FetchType.LAZY)
    private Customer customer;
    @ManyToOne(fetch = FetchType.LAZY)
    private MessageTemplate template;
    private Date sentDate;
    getter.setter...
}

@Entity(name = "target_group")
public class TargetGroup extends AbstractEntity {
    private String name;
    private String description;
    @ManyToMany(fetch = FetchType.LAZY)
    private List<Customer> customers = new ArrayList<>();
    getter.setter...
}

@Entity(name = "customer")
public class Customer extends AbstractEntity {
    private String name;
    private String email;
    private String mobile;
    @ManyToMany(mappedBy="customers", fetch = FetchType.LAZY)
    private List<TargetGroup> targetGroups = new ArrayList<>();
    @OneToMany(mappedBy = "customer", fetch = FetchType.LAZY)
    private List<SentMessage> sentMessages = new ArrayList<>();
    getter.setter...
}

@Entity(name = "message_template")
public class MessageTemplate extends AbstractEntity {
    private String subject;
    private String text;
    @OneToMany(mappedBy = "template", fetch = FetchType.LAZY)
    private List<SentMessage> sentMessages;
    getter.setter...
}

我希望TargetGroup,Customer,MessageTemplate成为查询的结果。我的选择:

SELECT msg FROM SentMessage msg JOIN msg.targetGroup tg, msg.customer cust, msg.template temp WHERE ....

那是正确的,还是我应该怎么写?我想要所有实体的所有参数。谢谢!

编辑:我想按TargetGroup的名称,Customer的名称和其他名称进行搜索,我该如何在WHERE中编写它?

被告

您必须select在查询子句中列出所需的结果

SELECT msg.targetGroup, msg.customer, msg.template FROM SentMessage msg 

您将获得一个Object[]包含数据。

如果由于延迟获取而遇到问题,则可以添加获取联接以检索相关实体:

SELECT msg.targetGroup, msg.customer, msg.template FROM SentMessage msg join fetch msg.targetGroup tg join fetch  msg.customer cust join fetch msg.template temp

编辑您的评论建议您在结果中还需要“父母”消息。在这种情况下,创建投影查询(在select子句中列出所有属性)是没有意义的。刚取父的消息,并调用定期干将访问的CustomerTargetGroup和其他协会。如果出现延迟获取的问题,请使用获取连接。

SELECT msg FROM SentMessage msg 

或者

SELECT msg FROM SentMessage msg join fetch msg.targetGroup tg join fetch  msg.customer cust join fetch msg.template temp

编辑2为向查询添加约束,您可以添加where引用任何id变量的常规子句:

... join fetch  msg.customer cust where cust.name = :cust_name... 

但是,提取与where子句结合在一起的行为是出乎意料的-子句也限制了提取where请参阅此线程以供参考

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sql select 3个表中的查询

来自分类Dev

如何编写高效的UPDATE-SELECT SQL

来自分类Dev

Select() 中的条件 Select()

来自分类Dev

SQL SELECT 和 JOIN

来自分类Dev

如何在Join codeigniter中插入SELECT

来自分类Dev

如何在SQL中编写select语句,以从提供的集合中返回以下结果

来自分类Dev

sql select语句有3个表?

来自分类Dev

如何用JS对象中的OPTIONS填充SELECT?

来自分类Dev

select提取中的select语句

来自分类Dev

SELECT #8 中的 sqlzoo SELECT

来自分类Dev

如何用SELECT结果中的另一个值替换由COUNT计算的一个值?

来自分类Dev

如何在SQL Server 2008 R2中的select语句内编写条件

来自分类Dev

如何使用正则表达式编写SQL select语句,它将以相反的顺序在LEFT中显示两个单词

来自分类Dev

如何使用Slick 3从SQL select查询中获取结果

来自分类Dev

SQL 中的特殊 SELECT

来自分类Dev

如何使用两个按组分组的 SQL select 编写 SQL 选择,还包括缺少日期的月份

来自分类Dev

如何总计 3 个 select 语句数?

来自分类Dev

JOIN中的SELECT WHERE语句

来自分类Dev

JPA。JOIN嵌套SELECT“意外令牌(“

来自分类Dev

结合2个select语句和join sql

来自分类Dev

如何在CakePHP中编写带有子查询的Select

来自分类Dev

如何用JavaScript弹出jQuery mobile select?

来自分类Dev

如何:如何使用SQL SELECT JOIN提取最新记录

来自分类Dev

两个SELECT和SELECT加JOIN的性能差异

来自分类Dev

如何在 Linq 中编写 SELECT FROM myTable WHERE id = (SELECT)?

来自分类Dev

SELECT JOIN 表操作

来自分类Dev

C#中的SQL查询错误:使用SELECT JOIN WHERE OR

来自分类Dev

SQL INNER JOIN-连接中的列名也位于select * error *

来自分类Dev

如何编写选择标签形式mybatis select

Related 相关文章

热门标签

归档