在我看来,TValue中缺少一个强制性方法; TValue.Equals(TValue).
因此,比较2个TValues的快速和体面的方式,最好不使用TValue.ToString(),它允许变体,记录等之间的错误匹配.
我想知道采取哪种方法来防止Hibernate 4.3.4(使用Spring和Hibernate Vaidator)来清除脏实体.在我的代码中,我使用Hibernate Validator的手动实现(实例本身中的.validate()方法),在保存实体之前调用它.validate()方法返回错误列表(如果找到),否则调用Session.update()来存储实体,然后提交事务.
这是有效的,但是当操作实例本身(在实体中设置发布/请求参数)时,实体和相应的Hibernate会话被标记为"脏",并且实体与下一个Session.flush()一起存储.
在我的情况下,我想明确控制可能存储的实体并防止存储任何脏实体,我将如何实现这一目标?
编辑:
我知道我可以通过驱逐实体(或通过合并清算并重新引入实体)来手动调节这一点,但这不是我的目标.我不想手动调节持久性,而是希望有一个偏移情况,即没有明确保存的实体以及未明确提交事务的实体将不会存储到数据库中(例如通过拦截器?).
在我们的生产(tomcat、java8)服务器上,我们不时会在日志文件中看到以下堆栈跟踪:
java.lang.Exception
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:102)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:139)
at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:82)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:106)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:158)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:591)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:527)
at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:380)
at org.apache.catalina.core.StandardHostValve.throwable(StandardHostValve.java:323)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:166)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种扫描所有加载类的方法,如果可能的话,包含自定义属性的类,而不使用RegisterClass().
我想知道是否可以直接引用类定义以便将它与RTTI结合使用(将属性映射到TRttiProperty等).
例如
我想使用TMyClass.MyProperty作为TRttiProperty,而不必通过名称/字符串解析它,这将保持我的代码和编译器完整性,因为字符串变量可能拼写错误,等等.
谢谢
delphi ×3
delphi-xe ×2
java ×2
rtti ×2
attributes ×1
class ×1
equality ×1
exception ×1
hibernate ×1
properties ×1
reflection ×1
session ×1
spring ×1
tomcat ×1
tvalue ×1
validation ×1
websocket ×1