相关疑难解决方法(0)

添加到集合时,PreUpdate不会触发

我有一个JPA注释类,其中包含如下集合:

@Entity
public class Employee {
    @Id
    private int id; 
    @Basic
    private String name;    
    @OneToMany
    @JoinTable(name = "ORG", joinColumns = @JoinColumn(name="MINION"),
        inverseJoinColumns = @JoinColumn(name="EMP"))
    private List<Employee> minions = new ArrayList<Employee>();

    @PreUpdate
    public void preUpdate(){ ... }
}
Run Code Online (Sandbox Code Playgroud)

我所看到的是,如果我有一个托管的Employee实体,并且我添加了它的minions集合,preUpdate则不会调用该方法.在DB中的映射表中添加了一个新行,因此我知道更新正在进行中.如果我直接在Employee上更改属性(如name),则会preUpdate在提交事务时按预期触发.

有没有办法在修改映射集合时触发PreUpdate?或者是否有其他技术或Hibernate特定注释用于检测何时发生?

java orm hibernate jpa

11
推荐指数
1
解决办法
4836
查看次数

使用Hibernate 4的Integrator模式和Spring的依赖注入

我习惯使用Spring来执行依赖注入,如下所示:

<context:component-scan base-package="org.emmerich.myapp" />
Run Code Online (Sandbox Code Playgroud)

然后用Autowired这样注释我的依赖类:

public class DependentClass {

    @Autowired
    private Dependency dependency;

}
Run Code Online (Sandbox Code Playgroud)

但是,随着Hibernate 4.0的变化,我们现在建议使用新Integrator接口进行服务发现.这包括添加事件侦听器触发器如postUpdate,postDelete

不幸的是,这与通过注释依赖项的依赖注入不能很好地协作.我有以下设置:

我已经定义了一个集成器来添加我的监听器ServiceFactory.这在文件中引用META-INF/services/org.hibernate.integrator.spi.Integrator.

public class MyIntegrator implements Integrator {

    private MyListener listener;

    public MyIntegrator() {
        listener = new MyListener();
    }

    @Override
    public void integrate(Configuration configuration,
                          SessionFactoryImplementor sessionFactory,
                          SessionFactoryServiceRegistry serviceRegistry) {
    final EventListenerRegistry eventRegistry =
        serviceRegistry.getService(EventListenerRegistry.class);

    eventRegistry.prependListeners(EventType.POST_COMMIT_INSERT, listener);

}
Run Code Online (Sandbox Code Playgroud)

我也定义了类MyListener,它看起来像你典型的事件监听器.

@Component
public class MyListener implements PostInsertEventListener {

    @Autowired
    private Dependent dependent;

    public …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate spring-mvc inversion-of-control

8
推荐指数
1
解决办法
1万
查看次数

在集合字段更改时触发 JPA 侦听器

@PreUpdate一旦我的实体发生变化,我就会使用 EntityListeners ( ) 来执行某些操作。但是我注意到实体内集合的更改不会触发 JPA 实体侦听器,这是有道理的,因为包含实体的表没有更改,而是多对多表。

有没有办法在集合更改的情况下使实体侦听器触发?

java persistence jpa listener

5
推荐指数
1
解决办法
1372
查看次数

关系发生变化时触发休眠(前/后)更新事件

我已经实现了Hibernate事件的前/后事件监听器,但有一点我无法克服.我有一个与Departments实体有多对多关系的Centers实体.将新中心分配给部门时,我只需调用:

oDepartment.addCenter(oCenter);
entitySave(oDepartment);
Run Code Online (Sandbox Code Playgroud)

当发生这种情况时,我希望Hibernate在我修改实体后触发preUpdate和postUpdate事件.但是,除非列属性也更新,否则永远不会触发它.仅更新关系属性似乎不会触发更新事件.

通过当前的Hibernate会话,我似乎无法找到任何允许我设置某种触发这些事件的标志.

关于我可以解雇这些事件的方法的想法?

coldfusion orm hibernate coldfusion-10

5
推荐指数
1
解决办法
993
查看次数