I have a User class that has a @OneToMany List<Address> property. Hibernate has created a join table between user and address. When a user logs in, I look for the user with a custom SQL query;
select * from user where username = ? and password = ?
This obviously returns all the other fields of user but not the List<Address>. Is there a way in Hibernate to also return the relational data without using custom queries?
Could I load the user through the custom query above, pull its ID, and then reload the user so that Hibernate loads all the fields? Are there any better ways?
@Entity
public class User {
@Id
@GeneratedValue
@GenericGenerator(name = "incremental", strategy = "increment")
private Long userID;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String email;
@Column(nullable = false)
private String password;
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_address",
joinColumns = @JoinColumn(name = "userID"),
inverseJoinColumns = @JoinColumn(name = "addressID"))
private List<Address> addresses;
}
@Entity
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@NonVisual
public Long addressID;
}
Try using HQL as below:
EDIT: Sample code to execute HQL