У меня есть 2 таблицы:
Код: Выделить всё
Role:
id, name
User:
id, login, name, role_id
Код: Выделить всё
@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 = new HashSet();
//getters and setters
Код: Выделить всё
@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
Код: Выделить всё
public interface UserRepository extends JpaRepository {
String Q_GET_ALL_USERS = "from User u left join Role r on u.role_id=r.id";
@Query(Q_GET_ALL_USERS)
Collection getAllUsers();
Вызвано: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: ожидается путь для присоединения! [из com.example.jpa.model.User u оставил присоединиться к роли r на u.role_id=r.id]
Насколько я понимаю, сущность не может содержать идентификатор (в моем случае в роли) для ссылок, и мне следует удалить это поле. Но сущность должна иметь @Id.
В этом случае мне следует создать новый столбец в «Роли»? или можно использовать более красивое решение?
Я перенес весь проект на Bitbucket.
Подробнее здесь: https://stackoverflow.com/questions/351 ... rysyntaxex
Мобильная версия