JPA joindre au printemps de démarrage de l'application

J'ai lu des exemples, mais ont ma question personnelle pour vous.
J'ai 2 tables:

Role:
id, name
User:
id, login, name, role_id

Rôle de l'entité

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

@Id
@Column(name = "id")
private long id;

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

@OneToMany(cascade = CascadeType.ALL, mappedBy = "role")
private Set<User> user = new HashSet<>();

//getters and setters

Entité utilisateur

@Entity
@Table(name = "user")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id",insertable = false, updatable = false)
private long id;

@Column(name = "login")
private String login;

@Column(name = "user_name")
private String userName;

@ManyToOne(fetch = FetchType.LAZY)
private Role role;

//getters and setters

Et référentiel:

public interface UserRepository extends JpaRepository<User, Long> {

String Q_GET_ALL_USERS = "from User u left join Role r on u.role_id=r.id";

@Query(Q_GET_ALL_USERS)
Collection<User> getAllUsers();

Ce code montre: Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [from com.example.jpa.model.User u left join Role r on u.role_id=r.id]

Comment je comprends l'entité ne peut pas contient 'id' (dans mon cas en Role) pour les références et, devrais-je supprimer ce champ. Mais l'entité qui devrait avoir "@Id".

Dans ce cas, je devrais créer une nouvelle colonne dans le "Rôle"? ou je peux utiliser plus belle décision?

J'ai mis tout projet de bb

vous avez oublié les "SÉLECTIONNEZ u" dès le début de votre JPQL.
Oui, j'ai oublié select u

OriginalL'auteur qizer | 2016-02-02