Задать вопрос
DennisKingsman
@DennisKingsman
Студент

Как вытащить связанную сущность в Hibernate?

Здравствуйте, я хочу понять как работать со связанными сущностями в 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
}

маппинг я оставил на волю аннотаций(вроде так можно, поправьте, пожалуйста, если нет) прописав только
<mapping class="com.example.auth.entity.user.User"/>
        <mapping class="com.example.auth.entity.GrowBox"/>

и допустим задача найти коробку по 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;
    }

но потом вспомнил, что в hql мы работаем не с базой ,а с представлением объекта => никаких user_id у меня быть не может, а что же у меня есть в самом объекте? а у меня в нем есть поле private User responsibleUser;
и возникает вопрос : мне что в параметр Query целого юзера передавать, чтобы по его id найти коробки (как по мне это выглядит как что-то лишнее)
вот, не могли бы вы описать, как это должно выглядеть правильно и почему, заранее спасибо
  • Вопрос задан
  • 653 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
DennisKingsman
@DennisKingsman Автор вопроса
Студент
Задал этот же вопрос на буржуйском стакоферфлов
https://stackoverflow.com/questions/56886968/how-s...
String hqlQuery = "from GrowBox gb where gb.responsibleUser.id =: userId";
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы