Критерии гибернации - возврат родительских записей, имеющих дочерние записи - PullRequest
3 голосов
/ 07 июля 2010

All

Я, вероятно, переоцениваю эту проблему, но ...

Для данной таблицы «A» с двумя отношениями «один ко многим» «A1» и «A2» возвращаются все записи в таблице «A», которые имеют хотя бы одну дочернюю запись в любой из таблиц «A1» или «A2». ..

Мне не обязательно знать, что такое дочерние данные, а скорее, что у меня просто есть дочерние данные.

Спасибо!

Ответы [ 3 ]

7 голосов
/ 07 июля 2010

Вам нужен Restrictions.isNotEmpty() критерий:

List<A> r = s.createCriteria(A.class)
    .add(Restrictions.or(
        Restrictions.isNotEmpty("a1"), 
        Restrictions.isNotEmpty("a2"))).list();
0 голосов
/ 07 июля 2010

Я думаю, что этот пример поможет вам.Он написан на t-sql, но должен легко следовать той платформе, которую вы используете.

/*Create data structures*/
CREATE TABLE Parent (  
  ParentId      INT         NOT NULL    PRIMARY KEY  
  , ParentName  VARCHAR(50) NOT NULL)

CREATE TABLE ChildA (  
  ChildAId      INT         NOT NULL    PRIMARY KEY  
  , ParentId    INT         NOT NULL    CONSTRAINT FK_ChildA_Parent FOREIGN KEY REFERENCES Parent(ParentId)  
  , ChildAName  VARCHAR(50) NOT NULL)

CREATE TABLE ChildB (  
  ChildBId      INT         NOT NULL    PRIMARY KEY  
  , ParentId    INT         NOT NULL    CONSTRAINT FK_ChildB_Parent FOREIGN KEY REFERENCES Parent(ParentId)  
  , ChildBName  VARCHAR(50) NOT NULL)

/* Insert four parents */  
INSERT INTO Parent VALUES (1,'A')  
INSERT INTO Parent VALUES (2,'B')  
INSERT INTO Parent VALUES (3,'C')  
INSERT INTO Parent VALUES (4,'D')  

/* Insert two children for A */  
INSERT INTO ChildA VALUES (1,1,'a')  
INSERT INTO ChildB VALUES (1,1,'a')

/* Insert one child for B */  
INSERT INTO ChildA VALUES (2,2,'b')

/* Insert one child for C */  
INSERT INTO ChildB VALUES (2,3,'c')

/* This select stmt returns A with children in both child tables, B with a child in ChildA, and C with a child in ChildB, but no D. */   
SELECT  *  
FROM    Parent p  
WHERE   EXISTS (select 1 from ChildA a where p.ParentId = a.ParentId)  
OR      EXISTS (select 1 from ChildB b where p.ParentId = b.ParentId)  
0 голосов
/ 07 июля 2010

Вам нужен подзапрос, используя DetachedCriteria:

В блоге Айенде есть пример . В настоящее время у меня нет времени на это.

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