2016-12-28 4 views
1

org.hibernate.HibernateException: найдено более одной строки с данным идентификатором: 578, для класса: com.hibernate.query.performance.persistence .model.Storeorg.hibernate.HibernateException: найдено более одной строки с данным идентификатором

база данных не имеет повторяющихся строк магазин с идентификатором 578. Это было проверено с помощью SQL:

SELECT * 
FROM store 
WHERE store.store_id = 578; 

Он вернулся 0 записей.

Другие вопросы, касающиеся One, Two, указывают, что проблема может быть связана с отображением OneToOne. Субъекты магазина и персонал имеют OneToOne отношений и мои отображаются так:

Персонал:

@OneToOne(mappedBy = "manager_staff", cascade = CascadeType.ALL, orphanRemoval = true) 
    public Store getStore() { 
     return store; 
    } 

Магазин:

@OneToOne 
    @JoinColumn(name = "manager_staff_id", referencedColumnName = "staff_id", nullable = false) 
    public Staff getManager_staff() { 
     return manager_staff; 
    } 

Как это исправить?


Обновление:

Исключение немного изменилась, когда запрос был изменен следующим образом:

Query query = session.createQuery("select c " + 
         " from Rental r, Customer c join fetch c.address address join fetch address.store store join fetch address.city city " + 
         " where r.customer = c " + 
         " and r.returnDate is null"); 

Исключение:

org.hibernate.HibernateException: More than one row with the given identifier was found: 2951, for class: com.hibernate.query.performance.persistence.model.Store 

Там не было никаких изменений в базу данных. Я не уверен, что HQL корректен, поскольку JProfiler не может поймать записи JPA/Hibernate. Единственными метриками, которые были обнаружены, являются JDBC-соединения, которые выполнялись.

ответ

-1

Ваши данные ошибочны, OneToOne означает, что у вас должна быть ссылка - поэтому убедитесь, что запрос возвращает одну запись. Если это необходимо, вам необходимо сделать это OneToMany