我正在将JPA与Hibernate和Spring启动器数据jpa一起使用。我想合并/更新一组项目。如果它是一个新项目,我想保留,如果它是一个已经存在的项目,我想更新它。
@PersistenceContext(unitName = "itemEntityManager")
private EntityManager em;
@Transactional
public void saveItems(Set<Item>> items) {
items.forEach(em::merge);
}
当我这样尝试时,每个项目都会创建一个新的HQL状态并且它不起作用。所以我正在寻找一种方法来一次性保存所有项目(如果可能的话),以节省调用和时间。
我发现:
EntityTransaction transaction = em.getTransaction();
transaction.begin();
items.forEach(em::merge);
transaction.commit();
但是我不能使用这个事务,因为我使用了@Transactional。有办法用原生SQL吗?
我创建了一个本机 SQL 语句:
String sqlValues = String.join(",", items.stream().map(this::toSqlEntry).collect(Collectors.toSet()));
em.createNativeQuery("INSERT INTO config_item"
+ "( id, eaid, name, type, road, offs, created, deleted )"
+ " VALUES " + sqlValues
+ " ON CONFLICT (id) DO UPDATE "
+ " SET "
+ "eaid=excluded.eaid,\n"
+ "name=excluded.name,\n"
+ "type=excluded.type,\n"
+ "road=excluded.road,\n"
+ "offs=excluded.offs,\n"
+ "created=excluded.created,\n"
+ "deleted=excluded.deleted;"
).executeUpdate();
这要快得多,并且有效
为此,可以使用@SQLInsert
来使用批插入。请参阅Hibernate事务和使用attachDirty(保存或更新)的并发
问题内容: 我已经建立了一个简单的多对多关系帐户:Hibernate角色,但是当我在添加角色后尝试在单元测试中保存帐户时,出现UnsupportedOperationException异常: 这是怎么了 我的实体设置有问题吗?或者这是hibernate或JPA限制,迫使我将m:m关系分解为3:n关系,也为m:n关系表建模(我想避免这种情况,因为它没有任何关系)附加信息)。我已经在原型中为其他1:n
问题内容: 我正在测试hibernate并将此查询提供给 我在命令行中得到这些查询: 我使用的是“合并不保存”,所以为什么hibernate正在更新我的对象,所以不应该更新。对吗 怎么了 问题答案: 我将尝试使用一个更具体的示例进行解释。假设您有以下情况: 尝试重新附加分离的对象时发生异常,userA。 为了解决上述问题,使用了merge(),如下所示:
我试图连接多个表,并将表列映射到用户对象列表。 下面是SQL查询,我正在尝试使用Hibernate条件转换为ORM: 从上面的查询中,我们将获得一个用户对象列表,并尝试将结果映射到用户对象。下面是要形成的用户对象的POJO类。 如何连接多个表和相应列到用户对象的映射? 谢谢你的帮助。。谢谢
我正在使用hibernate映射来自mysql数据库的数据。 以下是我的查询: 并得到一个错误: Apache Tomcat/7.0.23-错误报告 键入异常报告 注意可获得根本原因的完整堆栈跟踪
我想使用联接表在两个表之间建立一对多关系。 这就是为什么我想使用联接表: Hibernate单向一对多关联-为什么连接表更好 最后,我想使用Hibernate注释来执行此操作。 我找到了一些使用xml映射实现这一点的示例,但没有使用注释。 我相信这将是如何创建表需要
我有一个类似这样的数组: 我想要一个如下所示的结果对象: 我如何在Javascript中实现这一点?