[apache-commons] FilenameUtils.getExtension(“f”)
不是null,而是长度为0的字符串
不是null,而是长度为0的字符串
Hibernate: 设A引用了B,如果要先取A删A再取B删B,则删A后可能要evict(A.getB()),才能顺利删除B 否则,就会报错:a different object with the same identifier value was already associated with the session 原理是这样的: 第一步将A从数据库中取出时,它引用的B也从数据库中取出,两者同时成为持久化对象。A删除后,B是处于Session中的持久化对象 第二步中又显式地将B从数据库中取出,加上第一步中取出的B,Session里就有两个B了。这时侯如果删B,就会报上面所说的那种错误。 因此,应该在删除A后立即将它引用了的B从Session中清除掉。即: A = Session.load(A); Session.delete(A); Session.evict(A.getB()); Session.delete(B); =============================================== 注意:evict()并不会级联,除非设置了相应的cascade 也就是说,如果B引用了C, evict(B)时不会自动evict(C) 看官方文档: This operation cascades to associated instances if the association is mapped with cascade="all" or cascade="all-delete-orphan".
1.局部变量永远不会被多个线程共同访问。因为:If two threads happen to execute the same method, each thread gets a separate copy of the local variables of that method. 2.成员变量可能被多个线程共同访问,但是Java threads cannot arbitrarily access each other’s data objects: they need permission to access the objects, and one thread needs to pass the object reference to the other thread. 3.用设置flag的方法来终止线程 …
把successView当作http parameter传进来,可以方便重用Controller ========================================================== private ModelAndView toSv(HttpServletRequest request, HttpServletResponse response, Map model) { String sv = request.getParameter("sv"); return new ModelAndView(sv, model); }
JDK会自动帮它加上
因为上传可能会持续一断时间,要把按钮设为灰色,以确保用户不会乱点
‘\u007f’, 单引号不能丢 如果要用字符串,则表示为 String.valueOf(‘\u007f’)
1.应该把所有运行时配置(如轮询时间,而spring的接口注入则属于开发时配置)都集中到同一个根目录里,这样可以方便部署。一个Release中,有一部分是跟运行的环境有关的(如数据库地址、日志文件名等),有的是无关的(class文件,jsp文件,spring的接口注入等),我们把有关的部分集中一个根目录里,与无关的部分彻底分离,这样在部署时,无关的部分痛痛快快地用脚本做一次全量复制就行了 2. 如果一份程序的多个副本部署在多台机器上,除了要把运行环境相关部分和无关部分分开,对相关部分,也要区分各程序相同的部分和各程序不同的部分,如数据库的配置就各程序相同的,而日志文件路径和各采集器的配置就各不相同。还有一种配置,只在一个或多个程序中有意义并在这些程序中相同,但在其他程序中用不上,也可以视为各程序相同部分。通过这种区分,在部署时,对相同部分只须设定一次,然后用脚本复制多份即可
以确保该文件的路径有效. 注意,要执行该方法的主体并不是文件本身,而是这个文件所在的目录
如 Integer.parseInt(" 5 ") ,会抛出异常