2012-08-08 51 views
0

我想创造一个JPQL namedquery,但我不明白它是如何工作的?JPQL:如何构造WHERE子句?

这里我实体:

@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; 

我应该使用LEFT上参考JOIN &语言选择我的这些id的翻译?

谢谢。

回答

0

我想你想:

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秒。

+0

好吧,我真的不知道我在做什么。所以,当懒惰和连接出现时,我们必须使用“连接获取”来实现对这些标准的搜索?谢谢。 – MychaL 2012-08-08 12:16:04

+0

你没有_have to_,但它避免了一个额外的查询来获取它,当你尝试和懒洋洋地访问它... – MattR 2012-08-08 12:19:57

+0

oki ...这真的是懒惰模式的重要元素:)谢谢。 – MychaL 2012-08-08 12:27:19