我有实体:
@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子句中列出所有属性)是没有意义的。刚取父的消息,并调用定期干将访问的Customer
,TargetGroup
和其他协会。如果出现延迟获取的问题,请使用获取连接。
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] 删除。
我来说两句