mrb*_*lah 98 java hibernate using-statement
Java是否有一个在hibernate中打开会话时可以使用的using语句?
在C#中它是这样的:
using (var session = new Session())
{
}
Run Code Online (Sandbox Code Playgroud)
因此,对象超出范围并自动关闭.
Asa*_*aph 114
Java 7引入了自动资源块管理,它将此功能引入Java平台.Java的早期版本没有任何类似的东西using
.
例如,您可以使用java.lang.AutoCloseable
以下方式实现的任何变量:
try(ClassImplementingAutoCloseable obj = new ClassImplementingAutoCloseable())
{
...
}
Run Code Online (Sandbox Code Playgroud)
Java的java.io.Closeable
接口由流实现,自动扩展AutoCloseable
,因此您可以在try
块中使用流,就像在C#using
块中使用它们一样.这相当于C#的using
.
从5.0版开始,Hibernate Sessions实现AutoCloseable
并可以在ARM块中自动关闭.在先前版本的Hibernate Session中没有实现AutoCloseable
.因此,您需要使用Hibernate> = 5.0才能使用此功能.
Joa*_*uer 30
在Java 7之前,Java中没有这样的功能(对于Java 7及以上版本,请参阅Asaph关于ARM 的答案).
你需要手动完成,这很痛苦:
AwesomeClass hooray = null;
try {
hooray = new AwesomeClass();
// Great code
} finally {
if (hooray!=null) {
hooray.close();
}
}
Run Code Online (Sandbox Code Playgroud)
而这只是代码,既// Great code
不会也不会hooray.close()
抛出任何异常.
如果您真的只想限制变量的范围,那么一个简单的代码块可以完成这项工作:
{
AwesomeClass hooray = new AwesomeClass();
// Great code
}
Run Code Online (Sandbox Code Playgroud)
但那可能不是你的意思.
riw*_*iwi 18
从Java 7开始:http://blogs.oracle.com/darcy/entry/project_coin_updated_arm_spec
问题中代码的语法是:
try (Session session = new Session())
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
注意,Session
需要实现AutoClosable
或其中一个(许多)子接口.
技术上:
DisposableObject d = null;
try {
d = new DisposableObject();
}
finally {
if (d != null) {
d.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
最接近的Java等价物是
AwesomeClass hooray = new AwesomeClass();
try{
// Great code
} finally {
hooray.dispose(); // or .close(), etc.
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
63092 次 |
最近记录: |