【问题标题】:How do we set database session variables in Hibernate?我们如何在 Hibernate 中设置数据库会话变量?
【发布时间】:2020-06-25 02:30:15
【问题描述】:

当使用 Hibernate 和 JPA 时,我有一个现有的 DAO 抽象类,它以这种方式设置实体管理器:

@PersistenceContext(unitName = "<name>")
private EntityManager entityManager;

在某些方法中,它的使用方式如下:

public ObjectType findByPrimaryKey(int id) {
    return entityManager.find(ObjectType, id);
}

我想在与“查找”查询相同的事务中设置数据库配置参数。但是,我似乎找不到 entityManager 使用的内部事务。我编写了一个检查 Transactional 注释并在其中设置变量的 Aspect,并在 findByPrimaryKey 方法之上添加了@Transactional,但仍然没有在会话中设置。

这里有什么不正确的地方或其他方法吗?理想情况下,希望在每次查询之前设置一个特殊变量。

【问题讨论】:

  • 你到底想设置什么database configuration parameter
  • 它在 Postgres 中,在自定义命名空间下。每个事务的配置参数应该不同。您可以将其视为mynamespace.user_id。为了安全起见,这在表的策略中用于过滤掉行。

标签: java spring hibernate jpa


【解决方案1】:

最终的解决方案是将 Spring 的“@Transactional”注解(在调用我的数据访问层之前自动打开一个事务)与一个切入点“@Transactional”注解并在事务中运行查询的切面结合起来。在调用 Hibernate 数据访问层之前,只需在“@Transactional”方法中执行任何查询也可以。

没有“@Transactional”注解,我无法控制 Hibernate 的事务管理。

【讨论】:

    猜你喜欢
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多