【发布时间】:2015-12-26 14:28:51
【问题描述】:
当 hibernate 持久化一个实体时,它会自动将空 ID 替换为生成的 ID。这很好用,但是当我持久化一个已经在数据库中的对象{其中一列被标记为唯一}时,它不会返回正确的 ID,而是返回新创建的 ID。有没有办法获得正确的 ID?
这是我正在尝试做的{添加加载具有正确 id 的标签,尝试加载所有具有正确 id 的持久标签}:
// Create all tags
List<Tag> createdTags = createTags();
// Save all new tags, ignore tags that are already in the database
int error = tagService.saveTags(createdTags);
// load tags with correct ids
createdTags = tagService.getTagsByName(createdTags);
for (Tag t : createdTags) {
logger.debug("ID: " + t.getId() + "TAGNAME: " + t.getTagName());
}
Post post;
if (visibilityComboBox.getValue().equals(visibility.getPublicValue())) {
post = new Post(securityHelper.getLogedInUser(), message.getValue());
} else {
post = new Post(securityHelper.getLogedInUser(), message.getValue(), Visibility.FRIENDS);
}
// Save post
postService.persist(post);
// Save posts tags
if (createdTags == null || createdTags.size() > 0) {
PostTags postTags = new PostTags(createdTags, post);
postTagsService.persist(postTags);
}
我认为没有,所以我尝试从数据库中加载它。但这引出了我的第二个问题。鉴于此 HQL:
String query = "FROM " + this.genericType.getName()
+ " AS tags WHERE tags.tagName in (:tagName)";
List<Tag> ta = (List<Tag>) session.createQuery(query).setParameterList("tagName", namesArray).list();
namesArray 是一个字符串数组,tags.tagName 是一个字符串。
它总是只返回数组中的最后一个标签。为什么它不起作用?
感谢您的回答。
【问题讨论】:
-
不要发布代码链接。贴出代码。