criteria.list()返回两个条目而不是一个条目

时间:2014-02-12 05:33:12

标签: java hibernate

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();

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:1)

使用: criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);