Я все еще новичок в JPA и Hibernate , и я получаю следующие предупреждения:
WARN [org.hibernate.engine.loading.internal.LoadContexts] (default task-4) HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@50dab521<rs=com.mysql.jdbc.JDBC42ResultSet@44f85804>
WARN [org.hibernate.engine.loading.internal.CollectionLoadContext] (default task-4) HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [3] entries
Дело в том: У меня есть разные пользователи, и для некоторых из них (с очень маленькими данными) я могу войти, но для других (с немного большим количеством данных, но все еще небольшим) Я нет, и тогда приходят предупреждения. Мои журналы отладки показывают, что когда пользователь должен быть загружен, он нулевой. (Google говорит, что это может быть связано с моими отношениями с сущностями, типами и режимами выборки) Надеюсь, кто-нибудь может мне помочь, я понятия не имею, пока.
Ниже показаны две мои основные сущности и метод , который вызывается после кнопки входа в систему в представлении.
@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
@Entity
public class UserProfile extends StringIdEntity implements Serializable {
private Address address;
private String fname;
private String lname;
@OneToOne(cascade = {CascadeType.ALL}, fetch= FetchType.EAGER)
private PhysicalProfile physicalProfile;
@OneToOne(cascade = {CascadeType.ALL}, fetch= FetchType.EAGER)
private DietPlan dietPlan;
@OneToMany(mappedBy = "user", fetch= FetchType.EAGER, cascade = CascadeType.ALL)
private List<DiaryPage> diaryPages;
@OneToMany(mappedBy = "user",fetch= FetchType.LAZY, cascade = CascadeType.ALL)
private List<Meal> meals;
@OneToMany(mappedBy = "user",fetch= FetchType.LAZY, cascade = CascadeType.ALL)
private List<Invoice> invoices;
@OneToMany(mappedBy = "user",fetch= FetchType.EAGER, orphanRemoval = true)
@Fetch(value = FetchMode.SUBSELECT)
private List<GroceryOrder> orders;
@Entity @IdClass(DiaryPageID.class)
public class DiaryPage implements Comparable{ //extends StringIdEntity {
@Id @ManyToOne
private UserProfile user;
@Id @Temporal(TemporalType.DATE)
private Date date;
private KcalRevenue kcalRevenue;
@OneToMany(mappedBy = "diaryPage", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
private List<Meal> meals;
@OneToMany(mappedBy = "page", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
private List<Grocery> groceries;
@OneToMany(mappedBy = "diaryPage", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
private List<Workout> workouts;
@OneToMany(mappedBy = "diaryPage", cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SUBSELECT)
private List<Activity> activities;
public UserProfile checkUserLogin(String email, String password) {
UserProfile user = em.find(UserProfile.class, email);
if(user != null) {
try {
if(EntityUtils.hashPassword(password, user.getSalt(), UserProfile.HASH_ALGORITHM).equals(user.getPassword())) {
return user;
} else return null;
} catch (EntityUtils.EntityUtilException e) {
throw new RuntimeException("Passwort konnte nicht gehashed werden.");
}
} else return null;
}