В CollectionLoadContext # cleanup localLoadingCollectionKeys содержал [3] записей - PullRequest
0 голосов
/ 07 января 2019

Я все еще новичок в 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;
}

1 Ответ

0 голосов
/ 09 января 2019

Я решил проблему следующим образом: Я изменил все коллекции сущности diaryPage и коллекцию заказов из сущности userProfile, чтобы они извлекались лениво . Возможно, в начале все было хорошо с меньшим количеством данных, но теперь их слишком много, чтобы их можно было с энтузиазмом найти в подвыборах. Потому что: UserProfile -> n diaryPages -> каждая страница содержит 4 коллекции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...