2016-09-29 11 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 Queryメソッドでこれを行うことができます。http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation

+0

ここでマッピングが必要だと思います。ロールエンティティの@OneToMany。 – kopylov

+0

そのマッピングを使用すると、あなたのroleRepository内に次のようなことができます: @Query( "rをロールから選択r.client.cをc.email =:email") ロールfindOneByClientsEmail(@Param "電子メール")文字列電子メール); – GavinF

+0

今は基準APIを使用して – kopylov

関連する問題