Ich versuche, zwei Tabellen zu verbinden und das Ergebnis anzuzeigen, indem Sie Federdaten JPA eins zu eins Verbindung verwenden. Im Folgenden werde ich mein Modell und Repository-Klassen am Hinzufügen, Mein erstes Modellklasse Benutzer ist,Feder Daten jpa Tabellen Beitritt von eins zu eins Association
@Entity
@Table(name = "users")
public class Users implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "username")
public String username;
@Column(name = "password")
public String password;
@Column(name = "privid")
public Integer privid;
@OneToOne()
@JoinColumn(name="join_privillage")
private Privillages priviJoin;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getPrivid() {
return privid;
}
public void setPrivid(Integer privid) {
this.privid = privid;
}
public Privillages getPriviJoin() {
return priviJoin;
}
public void setPriviJoin(Privillages priviJoin) {
this.priviJoin = priviJoin;
}
protected Users() {
}
public Users(String username, String password, Integer privid) {
this.username = username;
this.password = password;
this.privid = privid;
}
@Override
public String toString() {
return String.format("Users[id=%d, username='%s', password='%s']", id,
username, password);
}
}
Und meine nächste Modellklasse, die ich anschließen müssen, ist:
@Entity
@Table(name = "privillages")
public class Privillages implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer id;
@Column(name = "privid")
public Integer privid;
@Column(name = "privi_name")
public String privi_name;
@OneToOne(fetch=FetchType.LAZY, mappedBy="priviJoin")
public Users user;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getPrivid() {
return privid;
}
public void setPrivid(Integer privid) {
this.privid = privid;
}
public String getPrivi_name() {
return privi_name;
}
public void setPrivi_name(String privi_name) {
this.privi_name = privi_name;
}
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
public Privillages() {
}
public Privillages(Integer privid, String privi_name) {
this.privid = privid;
this.privi_name = privi_name;
}
}
Und mein Repository ist:
public interface UsersRepository extends CrudRepository<Users, Integer> {
@Query("SELECT u.username FROM Users u inner join p.privi_name FROM
Privillages p")
List<Users> findByUsername();
}
Und wenn ich laufende Anwendung, seine hows der Fehler wie
"Unerwartetes Token: FROM nahe Zeile 1, Spalte 74 [SELECT u.username FROM com.central.model.Users u innere Verbindung p.privi_name FROM com.central.model.Privillages p]".
Und
"Validierung fehlgeschlagen für die Suche nach für die Methode public abstract java.util.List com.central.repository.UsersRepository.findByUsername()".
Ich verwende diese Abfrage mit ID als Bedingung. Mit der Anzeige von Benutzername und priv_name. Ich habe die Abfrage jetzt so geändert. "@ Query (" SELECT u.Benutzername, p.privi_name FROM Benutzer u innerer Join Privilegien p ON u.id = p.id ")" .But immer noch Fehler angezeigt "Pfad für Join erwartet! ". – Jacob
Auch mein Fremdschlüssel-Constraint liegt auf beiden Tabellen. – Jacob
Jetzt mit dem Update versuchen –