Ich benutze Spring Boot Daten jpa 1.4 und ich bin ziemlich neu dazu. Meine Tabellendefinition ist here. Es ist ziemlich einfach, es gibt 2 Tabellen (Gruppen und Benutzer).Inner Join im Frühjahr Boot Daten jpa
Die Gruppe Tabelle enthält group_id (Primärschlüssel), group_name, group_active (Werte = Y/N). die Gruppentabelle hat im Idealfall nur eine Zeile, die mit ‚Y‘ hat group_active ist, sollte der Rest
Die Benutzer Tabelle ‚N‘ hat enthält User_id (Primärschlüssel), benutzer_name, group_id (Fremdschlüssel aus Gruppe).
Im Folgenden sind meine Entitätsklassen
Gruppen:
@Entity
@Table(schema = "HR", name = "GROUPS")
public class Group {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "GROUP_ID")
private Long id;
@Column(name = "GROUP_NAME")
private String name;
@Column(name = "GROUP_ACTIVE")
private String active;
Benutzer:
@Entity
@Table(schema = "HR", name = "USERS")
public class User {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "USER_ID")
private Long id;
@Column(name = "USER_NAME")
private String name;
@Column(name = "GROUP_ID")
private Long groupId;
@ManyToMany
@JoinTable(
schema = "HR",
name = "GROUPS",
joinColumns = {@JoinColumn(table = "GROUPS", name = "GROUP_ID", insertable = false, updatable = false)},
inverseJoinColumns = {@JoinColumn(table = "USERS", name = "GROUP_ID", insertable = false, updatable = false)}
)
@WhereJoinTable(clause = "GROUP_ACTIVE='Y'")
private List<Group> group;
Repository Klasse:
public interface UserRepository extends CrudRepository<User, Long>{
List<User> findByName (String name);
}
Abfrage: Dies ist die Abfrage, die ich ausführen wollen, das ist eine einfache innere Verknüpfung.
SELECT U.*
FROM HR.USER U, HR.GROUP G
WHERE U.GROUP_ID=G.GROUP_ID
AND G.GROUP_ACTIVE='Y'
AND U.USER_NAME=?
Was wäre der richtige Weg sein, um die @JoinTable oder @JoinColumn so, dass ich immer ein Benutzer wieder zu schreiben, die mit dem Namen der aktiven Gruppe gehört?
Sind Sie in der Lage 'findAll()' in Benutzertabelle zu laufen? –