小编cli*_*unk的帖子

为什么事务回滚在RuntimeException而不是SQLException

我有一个Spring管理的服务方法来管理数据库插入.它包含多个插入语句.

@Transactional
public void insertObservation(ObservationWithData ob) throws SQLException 
{
    observationDao.insertObservation(ob.getObservation());
            // aop pointcut inserted here in unit test
    dataDao.insertData(ob.getData());
}
Run Code Online (Sandbox Code Playgroud)

我有两个单元测试,在调用第二个插入之前抛出异常.如果异常是RuntimeException,则回滚事务.如果异常是SQLException,则第一个插入是持久的.

我很困惑.任何人都可以告诉我为什么事务不会回滚SQLException?任何人都可以提出如何管理这个的建议吗?我可以捕获SQLException并抛出RuntimeException,但这看起来很奇怪.

spring transactions

25
推荐指数
2
解决办法
3万
查看次数

在 Scala 中使用部分函数时,我可以应用参数默认值吗

我定义了两个部分函数(散列),我希望它们采用可选的第二个布尔参数:

def SHA1 = hash(MessageDigest.getInstance("SHA-1"))_
def MD5 = hash(MessageDigest.getInstance("MD5"))_
private def hash(algorithm:HashAlgorithm)(s:String, urlencode:Boolean = false) = {
    val form = if (urlencode) "%%%02X" else "%02X"
    (algorithm.digest(s.getBytes) map(form format _)).mkString
}
Run Code Online (Sandbox Code Playgroud)

当我使用两个参数调用该函数时,它会编译,但只有一个参数时我会收到编译错误:

// First 3 tests are fine
val test1 = hash(MessageDigest.getInstance("SHA-1"))("foo", true)
val test2 = hash(MessageDigest.getInstance("SHA-1"))("foo")
val test3 = SHA1("foo", true)
// not enough arguments for method apply: (v1: String, v2: Boolean)String in trait Function2. Unspecified value parameter v2.
val test4 = SHA1("foo") 
Run Code Online (Sandbox Code Playgroud)

我只是将其重构为使用部分函数,​​在重构之前,我可以强制哈希函数使用默认值而不会出现任何问题。

为什么部分函数实现无法允许默认参数的任何想法?我使用部分函数和柯里化一起做错了吗?

scala currying partial-functions

0
推荐指数
1
解决办法
562
查看次数