基本上我正在查询如下表格
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的
洞察力表示赞赏! :)
答案 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>
如果另一个表引用该表,则其外键也必须是两列。
您的错误的另一个原因是,您有类似的表,并且一个类可以扩展您的关键字类。