所有
我可能过度分析了这个问题,但是......
给定具有两个一对多关系“A1”和“A2”的表“A”,返回表“A”中在表“A1”或“A2”中具有至少一个子记录的所有记录。 ..
我不一定有兴趣知道孩子数据是什么,而是我只有孩子数据。
谢谢!
答案 0 :(得分:7)
您需要Restrictions.isNotEmpty()
条件:
List<A> r = s.createCriteria(A.class)
.add(Restrictions.or(
Restrictions.isNotEmpty("a1"),
Restrictions.isNotEmpty("a2"))).list();
答案 1 :(得分:0)
你需要一个子查询,使用DetachedCriteria:
有一个example in Ayende's Blog。我目前没有时间来解决这个问题。
答案 2 :(得分:-1)
我认为这个例子会对你有所帮助。它是用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)