Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPQL:如何构造WHERE子句?_Java_Jpa_Jpql - Fatal编程技术网

Java JPQL:如何构造WHERE子句?

Java JPQL:如何构造WHERE子句?,java,jpa,jpql,Java,Jpa,Jpql,我想在JPQL中创建一个namedquery,但我不明白它是如何工作的 这里是我的实体: @Entity @NamedQueries({ @NamedQuery(name = "Translation.lang", query = "SELECT t FROM Translation t WHERE t.reference.id = :refId AND t.language.lang = :lang") }) @Table(name = "T_E_T

我想在JPQL中创建一个namedquery,但我不明白它是如何工作的

这里是我的实体:

@Entity
@NamedQueries({ 
    @NamedQuery(name = "Translation.lang", 
                query = "SELECT t FROM Translation t WHERE t.reference.id = :refId AND t.language.lang = :lang")
})
@Table(name = "T_E_TRANSLATION_TRL")
public class Translation implements java.io.Serializable {

@Id
@Column(name = "TRL_ID", unique = true, nullable = false)
@TableGenerator(name="translationSeqStore", 
    table="T_S_APP_SEQ_STORE_AST", 
    pkColumnName="AST_SEQ_NAME",
    valueColumnName = "AST_SEQ_VALUE",
    pkColumnValue = "T_E_TRANSLATION_TRL.TRL_ID", 
    allocationSize=1)
@GeneratedValue(strategy=GenerationType.TABLE, 
    generator="translationSeqStore")            
private Integer id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TRL_REF_ID", nullable = false)  
private Reference reference;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TRL_LAN_ID", nullable = false)  
private Language language;

@Column(name = "TRL_LABEL", nullable = false, length = 4000)    
private String label;
我应该使用引用和语言上的左连接来选择具有这些id的翻译吗

谢谢。

我想您需要:

SELECT t FROM Translation t join fetch t.reference join fetch t.language WHERE t.reference.id = :refId AND t.language.lang = :lang

它将加入(并获取惰性引用和语言),并返回ID为refId的引用和lang为lang的语言的
Translation
s

好吧,我真的不知道我在做什么。所以,当存在lazy和join时,我们必须使用“join-fetch”来实现对这些条件的搜索?谢谢。你不必这么做,但是当你尝试懒洋洋地访问它时,它避免了额外的查询来获取它…好的…这真的是懒洋洋的模式重要的元素:)谢谢。如果元素是一个集合,那么如何管理它呢?i、 如何研究特定元素的Id。。。这里有一个例子:@manytomy(fetch=FetchType.LAZY)@JoinTable(name=“T_-J_-MAN\u-AIR\u-MNA”,joinColumns={@JoinColumn(name=“MNA\u-MAN\u-ID”,nullable=false,updateable=false)},inverseJoinColumns={@JoinColumn(name=“MNA\u-AIR\u-ID”,nullable=false,updateable=false)})私有飞机=新哈希集(0);从手动m join fetch中选择m?WHERE???对于集合,
join fetch m.avirafts
,获取的工作方式相同,对于
WHERE
子句,您需要使用类似于
EXISTS
(请参阅JPQL语言参考)