Как я должен получить связанный объект? - PullRequest
1 голос
/ 04 июля 2019

Я хочу понять, как работать со связанными объектами в Hibernate.Есть две взаимосвязанные сущности:

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

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false)
    private String email;

    private boolean active;

    @Enumerated(EnumType.STRING)
    private Role role;

    @OneToMany(fetch = FetchType.LAZY, 
    mappedBy = "responsibleUser", cascade = CascadeType.ALL)
    private List<GrowBox> growBoxes;
    //def-constructor , getters, setters
}

и

@Entity
@Table(name = "growBoxes")
public class GrowBox {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;

    @Column(nullable = false)
    private Integer length;

    @Column(nullable = false)
    private Integer width;

    @Column(nullable = false)
    private Integer height;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "responsibleGrowBox", cascade = CascadeType.ALL)
    private List<Plant> plants;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "activeGrowBox", cascade = CascadeType.ALL)
    private List<Sensor> sensors;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User responsibleUser;
    //def-constructor , getters, setters
}

Я зарегистрировал отображение с использованием аннотаций.Надеюсь, это правильно.И я хочу найти поле по идентификатору пользователя, но не знаю, как должен быть написан HQL-запрос.Потому что в моем классе Box нет поля user_id.Вместо этого есть поле «Пользователь ответственный пользователь».И что-то вроде этого не будет работать (не должно)

@Autowired
SessionFactory sessionFactory;

@Override
public List<GrowBox> findByUser(Long userId) {

    Session session = sessionFactory.openSession();
    String hqlQuery = "from GrowBox where user_id =: userId";
    Query query = session.createQuery(hqlQuery);
    List growBoxes = query.getResultList();
    session.flush();
    session.close();
    return growBoxes;
}

1 Ответ

0 голосов
/ 04 июля 2019

HQL-запрос будет

String hqlQuery = "from GrowBox gb where gb.responsibleUser.id =: userId";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...