Hibernate criteria.list()返回两个条目而不是一个条目。在数据库中,TaxTable只有一个条目,有2个相应的TaxEntries。我认为我做的连接有问题。这是我的代码: 税率表:
@Entity
@Table(name = "tax_table")
public class TaxTable implements Serializable {
@Id @GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "taxTable",cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<TaxEntry> entries;
...
TaxEntry:
@Entity
@Table(name = "tax_entry")
public class TaxEntry implements Serializable {
@Id @GeneratedValue
private Long id;
private String name;
private BigDecimal percentage;
@ManyToOne
@JoinColumn(name = "account_id")
private Account toAccount;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "taxtable_id")
private TaxTable taxTable;
...
要获取结果,我使用以下代码:
@SuppressWarnings("unchecked")
@Transactional
public List<TaxTable> findAll() {
Session session = sessionFactory.getCurrentSession();
Criteria taxTableCriteria = session.createCriteria(TaxTable.class);
taxTableCriteria.addOrder(Order.asc("name"));
return taxTableCriteria.list();
}
在我的测试中,我创建了一个包含2个taxEntries的TaxTable:
...
taxEntryVAT.setTaxTable(taxTable);
taxEntryWT.setTaxTable(taxTable);
taxEntries.add(taxEntryVAT);
taxEntries.add(taxEntryWT);
taxTable.setEntries(taxEntries);
taxTableDao.create(taxTable);
并且fetch将返回2个具有相同id而不是1的taxTable的列表:
List<TaxTable> result = taxTableDao.findAll();
有什么想法吗?
由于
答案 0 :(得分:1)
使用: criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);