我正在使用HiberNate envers进行审计,我的大多数表都很好地执行批处理插入。然而,在我的一个实体上,我有一个经过审计的集合,它似乎不想批处理。
MyEntity:
@Entity
@DynamicUpdate
@Indexed(index = "aj")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ElementGroup {
...
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE })
@BatchSize(size = 30)
@OrderBy("id ASC")
@JoinTable(
name = "element_groups",
joinColumns = @JoinColumn(name = "group_id"),
inverseJoinColumns = @JoinColumn(name = "member_id")
)
@Audited
protected List<Element> members = new LinkedList<Element>();
(不确定这是否重要,我正在使用postgresql)。在日志中,我在一个循环中看到了1000条这样的语句
DEBUG 2021-11-07 15:28:56,673 [applicationInterfcePublishTaskExecuter-4::o.h.SQL.logStatement] [user:system]
insert
into
nst_netobj_groups_aud
(revtype, revend, rev, group_id, member_id)
values
(?, ?, ?, ?, ?)
DEBUG 2021-11-07 15:28:56,677 [applicationInterfcePublishTaskExecuter-4::o.h.SQL.logStatement] [user:system]
select
nst_netobj0_.rev as rev1_137_,
nst_netobj0_.group_id as group_id2_137_,
nst_netobj0_.member_id as member_i3_137_,
nst_netobj0_.revtype as revtype4_137_,
nst_netobj0_.revend as revend5_137_
from
nst_netobj_groups_aud nst_netobj0_
where
nst_netobj0_.group_id=?
and nst_netobj0_.member_id=?
and (
nst_netobj0_.revend is null
) for update
of nst_netobj0_
在进行一些调试时,我了解到select for update语句会导致上一次插入的刷新,而不允许它们批处理。这句话似乎就是原因:
final List<Object> l = qb.toQuery( session ).setLockOptions( LockOptions.UPGRADE ).list();
hibernate-envers-5.4.27.Final-sources.jar!/org/hibernate/envers/strategy/internal/ValidityAuditStrategy.java:328
我发现将刷新模式设置为手动/提交似乎没有帮助。有什么建议吗?
全堆栈跟踪:
logStatement:125, SqlStatementLogger (org.hibernate.engine.jdbc.spi)
prepareStatement:170, StatementPreparerImpl$StatementPreparationTemplate (org.hibernate.engine.jdbc.internal)
prepareQueryStatement:151, StatementPreparerImpl (org.hibernate.engine.jdbc.internal)
prepareQueryStatement:2104, Loader (org.hibernate.loader)
executeQueryStatement:2041, Loader (org.hibernate.loader)
executeQueryStatement:2019, Loader (org.hibernate.loader)
doQuery:948, Loader (org.hibernate.loader)
doQueryAndInitializeNonLazyCollections:349, Loader (org.hibernate.loader)
doList:2850, Loader (org.hibernate.loader)
doList:2832, Loader (org.hibernate.loader)
listIgnoreQueryCache:2664, Loader (org.hibernate.loader)
list:2659, Loader (org.hibernate.loader)
list:506, QueryLoader (org.hibernate.loader.hql)
list:400, QueryTranslatorImpl (org.hibernate.hql.internal.ast)
performList:219, HQLQueryPlan (org.hibernate.engine.query.spi)
list:1414, SessionImpl (org.hibernate.internal)
doList:1625, AbstractProducedQuery (org.hibernate.query.internal)
list:1593, AbstractProducedQuery (org.hibernate.query.internal)
performCollectionChange:328, ValidityAuditStrategy (org.hibernate.envers.strategy.internal)
performCollectionChange:76, AuditStrategy (org.hibernate.envers.strategy)
perform:87, PersistentCollectionChangeWorkUnit (org.hibernate.envers.internal.synchronization.work)
executeInSession:125, AuditProcess (org.hibernate.envers.internal.synchronization)
doBeforeTransactionCompletion:164, AuditProcess (org.hibernate.envers.internal.synchronization)
doBeforeTransactionCompletion:47, AuditProcessManager$1 (org.hibernate.envers.internal.synchronization)
beforeTransactionCompletion:954, ActionQueue$BeforeTransactionCompletionProcessQueue (org.hibernate.engine.spi)
beforeTransactionCompletion:525, ActionQueue (org.hibernate.engine.spi)
beforeTransactionCompletion:2381, SessionImpl (org.hibernate.internal)
beforeTransactionCompletion:447, JdbcCoordinatorImpl (org.hibernate.engine.jdbc.internal)
beforeCompletionCallback:183, JdbcResourceLocalTransactionCoordinatorImpl (org.hibernate.resource.transaction.backend.jdbc.internal)
access$300:40, JdbcResourceLocalTransactionCoordinatorImpl (org.hibernate.resource.transaction.backend.jdbc.internal)
commit:281, JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl (org.hibernate.resource.transaction.backend.jdbc.internal)
commit:101, TransactionImpl (org.hibernate.engine.transaction.internal)
doCommit:562, JpaTransactionManager (org.springframework.orm.jpa)
processCommit:743, AbstractPlatformTransactionManager (org.springframework.transaction.support)
commit:711, AbstractPlatformTransactionManager (org.springframework.transaction.support)
execute:152, TransactionTemplate (org.springframework.transaction.support)
lambda$publishApplicationInterfaceAsync$0:298, ApplicationInterfaceService (com.tufin.secureapp.service.interfaces)
run:-1, 16579879 (com.tufin.secureapp.service.interfaces.ApplicationInterfaceService$$Lambda$669)
runWorker:1149, ThreadPoolExecutor (java.util.concurrent)
run:624, ThreadPoolExecutor$Worker (java.util.concurrent)
run:748, Thread (java.lang)
我查过了,我发现了:
因此,在有人修复[HHH-14664]之前,唯一的选择是提供一个CustomValidityAuditStrategy
,扩展ValidityAuditStrategy
,并修复问题。
我使用Hibernate 4.0与envers 当我做更新或插入时,数据被保存到审计表中,模式为0和1 我想在插入后禁用审核。有人能告诉我如何禁用它吗。 我从4.0版本中读到了Hibernate,它会自动注册事件进行审计。 我想知道有什么方法可以禁用insert上的审核?
问题内容: 我正在尝试使用Nest将多个记录插入数据库。使用IndexMany类插入确实可以,但是我还需要通过json字符串插入对象。 我确实在github上进行了查找,并找到了一些如何使用RAWclient的示例。在代码示例下面,我插入json。 一些其他信息: jsondata: var twitter: 我从数据库收到的结果: 有人知道这个问题可能是什么吗?还是我在json /代码中丢失了什
本文向大家介绍如何执行批量插入?相关面试题,主要包含被问及如何执行批量插入?时的应答技巧和注意事项,需要的朋友参考一下 首先,创建一个简单的 insert 语句: 然后在 java 代码中像下面这样执行批处理插入:
我试图在集合中插入一个对象,我重载了' 但我仍然得到以下错误: /home/joju/NetBeansProjects/cppu 1/main。cpp:51:对“domino::domino(int,int)”的未定义引用 build/Debug/GNU-Linux-x86/main。o:在函数`std::less::operator()(domino const)中 /usr/include/c
员工提交报销后,审批人可在PC端和企业APP上对报销进行审批。 PC端 1.审批人登陆滴滴企业版用车管理后台,进入侧边栏“审批”页面; 2.在“我的待审批”中,可查看员工提交的未审批报销,可通过限定时间、申请人等信息进行搜索; 3.点击欲审批行程右侧的“审批”按钮; 4.可点击“详情”查看该行程是否满足审批条件,根据实际情况点击“通过并转交”或“驳回”; 5.当所有审批人都通过时,报销申请成功。
问题内容: 我在使用Mongoskin在Node上执行批量插入(MongoDB 2.6+)时遇到麻烦。 上面的代码给出以下警告/错误: 是否可以使用Mongoskin执行无序批量操作?如果是这样,我在做什么错? 问题答案: 您可以执行此操作,但是您需要更改调用约定才能执行此操作,因为只有“回调”形式实际上会返回可以从其调用方法的集合对象。您认为此用法的方式也存在一些差异: 因此,实际的“批量”方法