小编com*_*mit的帖子

为什么这不会抛出NullPointerException?

以下代码的澄清说明:

StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample.append("B");
System.out.println(sample);
Run Code Online (Sandbox Code Playgroud)

这将打印,B以便证明samplereferToSample对象引用相同的内存引用.

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因为我试图调用appendnull引用.

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,但它不会抛出一个,为什么?

java reference nullpointerexception

89
推荐指数
4
解决办法
3869
查看次数

save和saveOrUpdate方法之间的区别是hibernate

通常我读过关于save()方法生成对象的新标识符并且只触发INSERT并保存它,它不会更新它,而saveOrUpdate()方法可能会INSERTUPDATE记录.

但根据我的经验,我可以通过示例代码更好地解释,

假设有A类,我觉得从记录表A

A a = getHibernateTemplate.findById(7);
Run Code Online (Sandbox Code Playgroud)

所以现在我得到一个持久对象,

现在我试图通过简单修改一些字段来保存使用save方法的记录,

现在我开火了,

getHibernateTemplate.save(a);
Run Code Online (Sandbox Code Playgroud)

所以它只是更新现有记录,但据我所知,它应该创建新的记录.

我可能对certian事情有误,有人可以清楚这个吗?

java hibernate

23
推荐指数
2
解决办法
8万
查看次数

为什么不建议使用HibernateTemplate?

我习惯于在hibernate 3中使用getHibernateTemplate(),现在我正在转向Hibernate 4,在这里我没有找到以下类:

org.springframework.orm.hibernate4.support.HibernateDaoSupport;
Run Code Online (Sandbox Code Playgroud)

在这里我读过关于它不建议使用它

http://forum.springsource.org/showthread.php?117227-Missing-Hibernate-Classes-Interfaces-in-spring-orm-3.1.0.RC1

有人能解释一下为什么吗?现在我需要在hibernate 4中执行所有任务,比如提交,关闭,刷新由getHibernateTemplate()方法自动管理的事务?

java spring hibernate

17
推荐指数
1
解决办法
4万
查看次数

在hibernate中包含log4j属性文件,以显示带有值而不是问号的查询

我有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

java hibernate log4j

16
推荐指数
1
解决办法
3万
查看次数

serialize和serializeObject jquery之间的区别

我搜索了很多,但没有找到jquery serializeserializeObjectjquery方法之间的完美区别.

请帮我理解这个.

jquery

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

Spring安全检查用户是否可以访问提到的url

我已经开始使用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)

java spring spring-mvc spring-security

12
推荐指数
1
解决办法
1800
查看次数

使用什么冲洗模式'自动'或'提交'

正如我的标题所描述的那样,我Auto在我的应用程序中使用了hibernate flush模式机制.因此,当我更改hibernate持久对象中的任何数据时,它会自动反映在数据库中.我不想要这个.所以我找到了一个使用FlushMode的解决方案Commit.

所以这是我的实际问题:

  • 使用Commit刷新模式而不是Auto?和
  • 文档中此声明的含义是什么?

    在查询执行之前,有时会刷新会话,以确保查询永远不会返回失效状态.

http://docs.jboss.org/hibernate/orm/3.5/javadoc/org/hibernate/FlushMode.html

java session spring hibernate

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

检查地图的空值

我得到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所有时间,我只是简单的问题是我不能使用这样的变量?或者还有其他选择吗?

java

9
推荐指数
1
解决办法
3万
查看次数

如何在eclipse kepler中打开两个并排窗口

有人能告诉我如何在eclipse kepler中打开两个或更多文件编辑器吗?

在像helios这样的版本之前它可以通过快捷键ctrl + 8打开.

helios中看起来像这样

在此输入图像描述

但在凯普勒,我无法做到这一点.

eclipse-kepler

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

表达式语言在tomcat 7中跳过标识符检查

我收到以下错误:

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.E​​LException:标识符[return]不是有效的Java标识符

但它对我不起作用,因为我不想在我的代码中进行更改.所以我想要解决方案将tomcat 7配置为SKIP IDENTIFIER CHECK为true.

即使经过大量的谷歌搜索,我也没有办法做到这一点.我正在使用eclipse juno和tomcat 7,请帮我看看.

java eclipse tomcat

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