2016-09-29 31 views
1

我是初學者在jpa和我遇到複合查詢。 然後我開始搜索解決方案。許多人建議使用標準API。需要幫助來創建條件子查詢

所以問題:如何使用criteriaQuery創建類似的查詢?

MySQL版本

SELECT role FROM Role WHERE id_role=(SELECT id_role FROM Client WHERE email=:email) 

角色

@Entity 
@Table(name="role") 
public class Role { 

@Id 
public int id_role; 

private enum enumRole {ADMIN, CLIENT} 

@Column(name="role") 
private enumRole role; 

public Role() { 
} 

public Role(enumRole role) { 
    this.role = role; 
} 

public String getRole() { 
    return this.role.name(); 
} 

public void setRole(String role) { 
    this.role = enumRole.valueOf(role); 
} 
@OneToMany(targetEntity = Client.class) 
private List clientList; 
} 

客戶

@Entity 
@Table(name ="client") 
public class Client { 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
public Long Id; 

@Column(name="first_name", length = 25) 
private String firstName; 

@Column(name="surname", length = 25) 
private String surName; 

@Column(name="password", length = 30) 
private String password; 
@Column(name="email") 
private String email; 

@Column(name="username", length = 15) 
private String username; 

public Client() { 
} 

@ManyToMany(targetEntity = Ticket.class) 
private Set ticketSet; 

public Client(String firstName, String surName, String password, String email, String username) { 
    this.firstName = firstName; 
    this.surName = surName; 
    this.password = password; 
    this.email = email; 
    this.username = username; 
} 

public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public String getSurName() { 
    return surName; 
} 

public void setSurName(String surName) { 
    this.surName = surName; 
} 


public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

} 
} 

回答

0

你能不能創建的映射客戶和角色?要麼@OneToMany或@ManyToMany?如果是這樣,那麼你不需要寫任何SQL,並可以用簡單的JPA查詢方法做到這一點http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation

+0

我認爲這裏需要映射。角色實體中的@OneToMany。 – kopylov

+0

有了這個映射,你可以在你的roleRepository裏面執行如下操作: @Query(「select r from Role r left join r.clients c where c.email =:email」) 角色findOneByClientsEmail(@Param( 「email」)字符串電子郵件); – GavinF

+0

但目前我想用標準API來做到這一點 – kopylov