Я недавно заменил базу данных модульных тестов PostgreSql на базу данных H2 в памяти. Я не мог понять, почему пара тестов провалилась, с Postgre все работало нормально. Есть ок. 280+ юнит-тестов в этом приложении. Неудачные тесты dao выбираются из представления, и у сущности есть EmbeddedId, то есть столбцы этого представления.
См. Ниже код (Примечание: я изменил имена, код и sql, чтобы скрыть настоящие имена при написании этого письма, но это был работающий юнит-тест с Postgre db)
<pre>
@Table(name = "item_view") // <- item_view is a database view
public class ItemV implements Serializable
{
.....
@EmbeddedId // <- entity has an embedded id
private ItemVId id;
.....
@Embeddable
public static class ItemVId implements Serializable //<- This is the embeddedId
{
@Column(name = "item_id", updatable=false, insertable=false)
private Long ItemId; //<- col no.1 of view
@Column(name = "item_type_id", updatable=false, insertable=false)
private Integer ItemTypeId; //<- col no.2 of view
.....
ItemType is an enum
And the view is
CREATE OR REPLACE VIEW item_view AS
( ( ( SELECT pt.id as item_id, cit.id as item_type_id
FROM xyz pt, item_type cit
WHERE pt.name::text = 'xyz'::text
UNION
SELECT z.id as item_id, cit.id as item_type_id
FROM zzz z, item_type cit
WHERE z.name::text = 'zzz'::text)
..............
and the dao method is
public ItemView find(Long itemId, ItemType itemType)
{
String hql = " from ItemV iv where iv.id.itemId = :itemId and iv.id.itemTypeId = :itemTypeId ");
List<ItemView> result = (List<ItemView>)getEntityManager()
.createQuery(hql)
.setParameter("itemId", itemId)
.setParameter("itemTypeId", itemType.getId())
.setMaxResults(1)
.getResultList();
return result.isEmpty()
? null : result.get(0);
}
Этот метод dao всегда возвращает пустые результаты, никогда не находя существующие строки в представлении ??? Я знаю, что эти строки существуют, потому что когда я выполняю getAll () на том же дао, я вижу результаты и вижу соответствующую строку для критериев.
Есть ли что-то особенное в выборе строк из представления в базе данных H2?
Спасибо