小编Seb*_*ian的帖子

Hibernate 验证和 Spring 控制器的一项事务

我正在尝试为 Rest API 实现注册控制器。我已经阅读了很多关于放置@Transactional 的内容。(不是在 DAO 级别,而是在可能编排的服务)。在我的用例中,我不仅需要服务,还需要休眠验证来使用相同的事务。

这是控制器的代码:

@Autowired
private UserService userService;

@RequestMapping(method = RequestMethod.GET)
@ResponseBody
@Transactional
public DefaultResponse register(@Valid RegisterIO registerIO, BindingResult errors) {
    DefaultResponse result = new DefaultResponse();

    if (errors.hasErrors()) {
        result.addErrors(errors);
    } else {
        userService.register(registerIO);
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

我编写了一个自定义约束注释,它验证参数 registerIO 的属性。两者,这个验证器和 userService.register(registerIO); 访问数据库(检查电子邮件地址是否已被使用)。

因此我希望这两种方法都使用相同的 Hibernate 会话和事务。

这种方法导致以下异常:

org.hibernate.HibernateException: No Session found for current thread
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:941)
Run Code Online (Sandbox Code Playgroud)

问题是@Transactional 注释。当我将此注释放在调用数据库的方法上时,一切正常,但两个事务都开始了。我怀疑当我将它放在 register 方法中时,在 @Transactional 启动此方法的事务之前执行休眠验证。

我开发了以下功能解决方法,但我对此并不满意。此代码不使用 @Valid 注释而是自行调用验证器:

@RequestMapping(method = RequestMethod.GET)
@ResponseBody
@Transactional
public DefaultResponse register( RegisterIO registerIO, BindingResult …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc transactional hibernate-validator hibernate-4.x

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

Hibernate + SQL Azure =找不到数据类型boolean

我正在使用hbm2ddl.auto = create在SQL Azure数据库中使用hibernate生成模式.使用带有"无法找到数据类型布尔值"的布尔值或布尔类型时,此操作失败.例外.

这可能与使用的方言"org.hibernate.dialect.SQLServerDialect"和此Bug报告有关.我正在使用Hibernate-core 4.1.3,因此应该解决这个bug.

有人可以帮我解决这个问题吗?

hibernate azure azure-sql-database

2
推荐指数
1
解决办法
1864
查看次数