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