Hibernate Framework - 返回重复的字段

时间:2012-03-25 22:28:53

标签: java hibernate orm

基本上我正在查询如下表格

keywordId | keyword

1             abc 
1             abcd 
2             feg 
2             xyz 
2             tuv

当我传递诸如以下的查询时:

"FROM keyword Where keywordId = 2"

我回过头来看:

2             feg
2             feg
2             feg

这是我正在使用的方法

public List<DataModel> selectRecord(String sqlQuery) {  

    SessionFactory factory = new Configuration().configure().buildSessionFactory();
    Session session = factory.openSession();
    session.beginTransaction(); 
    Query query = session.createQuery(sqlQuery);
    List<DataModel> data = query.list();

     session.clear();
     session.close();
     return data;

}

老实说不太确定为什么会发生这种情况,但它也会在其他表中出现,结构相同可能是FK的

洞察力表示赞赏! :)

2 个答案:

答案 0 :(得分:1)

主要原因是它们在数据库中没有标识符属性。 Hibernate无法理解和

  

2&gt; feg

与下面的不同。

  

2&gt; XYZ

最佳做法是为表定义主键。您可以访问this link找到有关此问题的更多信息。希望这有助于

答案 1 :(得分:0)

即使Hibernate只喜欢只有一列的主键,你仍然可以像你一样,但你必须知道你的表的主键是列keywordId和关键字。

我猜错误在你的映射中。主键的映射应如下所示:

<composite-id>
    <key-property name="keywordId" column="..." type="int" /> 
    <key-property name="keyword" column="..." type="java.lang.String" /> 
</composite-id>

如果另一个表引用该表,则其外键也必须是两列。

您的错误的另一个原因是,您有类似的表,并且一个类可以扩展您的关键字类。