以下代码的澄清说明:
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample.append("B");
System.out.println(sample);
Run Code Online (Sandbox Code Playgroud)
这将打印,B
以便证明sample
和referToSample
对象引用相同的内存引用.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
sample.append("A");
referToSample.append("B");
System.out.println(referToSample);
Run Code Online (Sandbox Code Playgroud)
这将打印AB
,也证明是相同的.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
referToSample.append("A");
System.out.println(sample);
Run Code Online (Sandbox Code Playgroud)
显然这将抛出NullPointerException
因为我试图调用append
null引用.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
sample.append("A");
System.out.println(sample);
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题,为什么最后一个代码示例没有抛出,NullPointerException
因为我从前两个示例中看到并理解的是,如果两个对象引用同一个对象,那么如果我们更改任何值,那么它也会反映到其他,因为它们都指向相同的内存参考.那么为什么这条规则不适用于此?如果我分配null
给referToSample,那么sample也应该为null,它应该抛出一个NullPointerException,但它不会抛出一个,为什么?
通常我读过关于save()方法生成对象的新标识符并且只触发INSERT并保存它,它不会更新它,而saveOrUpdate()方法可能会INSERT或UPDATE记录.
但根据我的经验,我可以通过示例代码更好地解释,
假设有A类,我觉得从记录表A的
A a = getHibernateTemplate.findById(7);
Run Code Online (Sandbox Code Playgroud)
所以现在我得到一个持久对象,
现在我试图通过简单修改一些字段来保存使用save方法的记录,
现在我开火了,
getHibernateTemplate.save(a);
Run Code Online (Sandbox Code Playgroud)
所以它只是更新现有记录,但据我所知,它应该创建新的记录.
我可能对certian事情有误,有人可以清楚这个吗?
我习惯于在hibernate 3中使用getHibernateTemplate(),现在我正在转向Hibernate 4,在这里我没有找到以下类:
org.springframework.orm.hibernate4.support.HibernateDaoSupport;
Run Code Online (Sandbox Code Playgroud)
在这里我读过关于它不建议使用它
有人能解释一下为什么吗?现在我需要在hibernate 4中执行所有任务,比如提交,关闭,刷新由getHibernateTemplate()方法自动管理的事务?
我有crearte log4j.properties文件,如下所示:
log4j.logger.org.hibernate=INFO, hb
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate.hql.ast.AST=info
log4j.logger.org.hibernate.tool.hbm2ddl=warn
log4j.logger.org.hibernate.hql=debug
log4j.logger.org.hibernate.cache=info
log4j.logger.org.hibernate.jdbc=debug
log4j.appender.hb=org.apache.log4j.ConsoleAppender
log4j.appender.hb.layout=org.apache.log4j.PatternLayout
log4j.appender.hb.layout.ConversionPattern=HibernateLog --> %d{HH:mm:ss} %-5p %c - %m%n
log4j.appender.hb.Threshold=TRACE
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我如何将其包含在hibernate.cfg.xml
文件中吗?对不起,我实际上不知道log4j是如何工作的.我创建它来显示我的hibernate查询value
而不是?
但它仍然没有显示?
任何变化所以我需要进一步继续吗?
我从这里参考Hibernate显示真正的SQL
我搜索了很多,但没有找到jquery serialize
和serializeObject
jquery方法之间的完美区别.
请帮我理解这个.
我已经开始使用spring security,经过大量研究后我无法找到答案:
如果我明确要检查,如果用户A可以访问的东西B.我可以用JSP标签支持检查这个春季安全-检查网页的网址是安全/保护像
<sec:authorize url="stuff/B">
Run Code Online (Sandbox Code Playgroud)
但是如果我想在控制器(java类)中检查相同的东西呢.我在这里找不到任何弹簧函数来检查登录用户是否可以访问提到的URL(https://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html)
正如我的标题所描述的那样,我Auto
在我的应用程序中使用了hibernate flush模式机制.因此,当我更改hibernate持久对象中的任何数据时,它会自动反映在数据库中.我不想要这个.所以我找到了一个使用FlushMode的解决方案Commit
.
所以这是我的实际问题:
Commit
刷新模式而不是Auto
?和文档中此声明的含义是什么?
在查询执行之前,有时会刷新会话,以确保查询永远不会返回失效状态.
http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/FlushMode.html
我得到map
了结果,当我获得价值时,我需要将其转换为String
如下所示:
a.setA(map.get("A").toString());
Run Code Online (Sandbox Code Playgroud)
但如果它返回而null
不是它抛出nullPointerException
,那么我用下面的方法改变它:
a.setA(map.get("A")!=null?map.get("A").toString():"");
Run Code Online (Sandbox Code Playgroud)
但是我有20多个字段,所以我只想这样做:
String val = "";
a.setA(val=map.get("A")!=null?val.toString():"");
Run Code Online (Sandbox Code Playgroud)
但它返回blank
所有时间,我只是简单的问题是我不能使用这样的变量?或者还有其他选择吗?
有人能告诉我如何在eclipse kepler中打开两个或更多文件编辑器吗?
在像helios这样的版本之前它可以通过快捷键ctrl + 8打开.
在helios中看起来像这样
但在凯普勒,我无法做到这一点.
我收到以下错误:
SEVERE: Servlet.service() for servlet jsp threw exception
javax.el.ELException: The identifier [case] is not a valid Java identifier as required by section 1.19 of the EL specification (Identifier ::= Java language identifier). This check can be disabled by setting the system property org.apache.el.parser.SKIP_IDENTIFIER_CHECK to true.
Run Code Online (Sandbox Code Playgroud)
这是由于在tomcat 7默认情况下SKIP IDENTIFIER CHECK功能是假的(在tomcat 6及以下版本中都是如此)我在正则表达式中使用"case"而case是标识符所以它会抛出错误.
我找到了以下解决方案: javax.el.ELException:标识符[return]不是有效的Java标识符
但它对我不起作用,因为我不想在我的代码中进行更改.所以我想要解决方案将tomcat 7配置为SKIP IDENTIFIER CHECK为true.
即使经过大量的谷歌搜索,我也没有办法做到这一点.我正在使用eclipse juno和tomcat 7,请帮我看看.