0
Hibernate criteria.list()返回兩個條目而不是一個。在數據庫中只有TaxTable的條目和2個相應的TaxEntries。我認爲我做的連接有問題。這裏是我的代碼: 稅率表:criteria.list()返回兩個條目而不是一個
@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 :
...
taxEntryVAT.setTaxTable(taxTable);
taxEntryWT.setTaxTable(taxTable);
taxEntries.add(taxEntryVAT);
taxEntries.add(taxEntryWT);
taxTable.setEntries(taxEntries);
taxTableDao.create(taxTable);
而且取將返回2個taxTables列表具有相同ID,而不是一個:
List<TaxTable> result = taxTableDao.findAll();
任何想法?
由於
謝謝你的工作。你能告訴我爲什麼嗎? – clausmc
通常hibernate在表上執行左外連接。因此它將包含左表中的所有行和右結果重複行中的匹配行。通過指定Criteria.DISTINCT_ROOT_ENTITY,Hibernate將知道不會包含所有從左邊只匹配的行可以包含在結果中。這就是我瞭解到目前爲止..更多信息,你可以谷歌。 –