2014-09-03 3 views
0

У меня есть объект A, который имеет связь с Tempa лицом согласно ниже:HibernateException: Более одной строки с данным идентификатором был найден: 111, для класса: Tempa

@OneToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "ID") 
private TempA tempA; 

Тогда в doInHibernate I звоните это

Criteria c = session.createCriteria(A.class); 
c.add(Restrictions.eq("id", code)); 
Object result = c.uniqueResult(); 

после этого я получил ошибку. TempA - это общая таблица, так что другая служба может фактически вставляться в эту таблицу. Мне нужно, чтобы предотвратить спящий режим вызова этого TempA. Я смог помешать ему выполнить левое соединение с A, однако он все еще вызывает эту ошибку.

ответ

0

В начале - имя столбца объединения не должно быть «ИД». Столбец Идентификатор - столбец для идентификатора основного объекта. это следует называть tempA_id. Тогда, если вы хотите получить эту Темпа objcet вы должны использовать

criteria.createAlias(tempA, tempA) сказать спящий режим, он должен использовать соединение, а затем вызвать что-то вроде

c.add(Restrictions.eq("tempA.id", code)); 

но короче версии: c.add(Restrictions.eq("tempA", tempA_instance)); вы можете работать на объекте и спящий уход за всем.

Смежные вопросы