2014-08-27 69 views
-1

多行我有一個項目一個問題,spring和hibernate:休眠,Criteria.list()返回我的期望

在我的數據庫(MySQL的)我有這些表:

table Operator{ 
    idOperator int(12) primary key auto_increment, 
    name varchar(20), 
    surname varchar(20), 
    username varchar(20), 
    password varchar(20), 
    type varchar(2) 
    } engin=InnoDB; 

table Customer{ 
     idCustomer int primary key, 
     name varchar(20), 
     surname varchar(20), 
     lastOrder date, 
} engine = InnoDB; 

和許多前面的兩個表之間一對多的關係:

table portfolio{ 
    idOperator int, 
    idCustomer int, 
    foreign key(idOperator) references Operator(idOperator)on update cascade on delete cascade 
    foreign key(idCustomer) references Customer(idCustomer) on update cascade on delete cascade 
}engine = InnoDB; 

在我的運營商實體類映射到我這樣的表:

​​

當我問與此代碼運營商的列表:

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Operator.class); 
    criteria.add(Restrictions.eq("type","ad")); 
    return criteria.list(); 

結果包括每個操作的若干時間的次數相等,其中在關係圖集「操作partecipates 。

有人可以幫助我嗎?由於

+0

試試您的條件 – user3487063 2014-08-27 20:24:47

回答

0

嘗試象下面這樣:

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Operator.class); 
    criteria.add(Restrictions.eq("type","ad")); 
criteria.setProjection(Projections.distinct(Projections.property("id"))) 
    return criteria.list(); 
+0

使用Projections.distinct我想你的暗示,但我得到了以下錯誤:javax.el.PropertyNotFoundException:房產「身份證」的類型找不到java.lang.Integer – 2014-08-27 21:29:25

+0

你有你的實體的ID和getter和setter嗎? – user3487063 2014-08-27 22:04:12

+0

是的,現在我解決了添加這一行:criteria.setResultTrasformer(Criteria.DISTINCT_ROOT_ENTITY); – 2014-08-28 08:02:27