Liny_@NotePad

沉迷ACG中

JPA属性访问方式

在model中封装了一个对象,在一些属性的setter中加入了对该对象的访问,结果发现全无效果。

百度了下,原来是因为JPA有两种属性访问方式:

  • 域访问field access):无需设置getter/setter,直接在字段上设定@Column等值,在运行时注入值。
  • 属性访问property access):必须设定getter/setter,在getter上设定@Column等值,通过getter/setter注入值。

原本之前是用直接配置在字段名字上的field access方式,所以没有调用到getter/setter,

而项目使用的是1.0版本的JPA,不支持在一个entity中混用两种方式,因此我把这个entity的属性全部改为了property access。

关于域访问方式与属性访问方式的比较,可以阅读此文:[译文]JPA的实施模式:域访问和属性访问之间的比较

HQL与Criteria

之前一直都在用HQL,现在的项目组却更推荐用Criteria,为什么呢……

于是查了下资料,和同学、朋友交流了下,就最浅显的部分做了少少比较,还请指点一二。 > < //

Caused by: java.net.UnknownHostException: struts.apache.org

在做demo时遇到的问题,

起初搜了半天似乎都是说没有联网,DTD无法读取。

查了下DTD似乎是优先在本地读取,再读其他的。

但是我的另一个项目就用得好好的,不同点只有引入的jar包。

搞了一上午搞不定,下午仔细一看囧到……

是jar包的版本不一致导致。

DWR+EXT在线聊天

嗯,么想到这么快就过了123456hits,没有截图到囧。大概是因为这几天开始校园招聘了吧,发现关键字里面很多都是XX 笔试……

那么放送一个半年前搞的Ext+DWR实现聊天的段落、、
玩这个是因为毕业设计里面有一个需要教师在线指导学生的模块,类似于聊天室,界面如下图(中的在线指导子页面)所示:

Ext用的是Ext JS Library 2.0.2,DWR则使用2.0,因为支持Server Push。

贴一段技术手册里的介绍^^:

系统中教师指导学生模块可以通过在线聊天的方式进行,该模块的实现采用了Server Push(服务器推送)技术,实时发送消息,优于现在浏览器通过AJAX轮询服务端的策略。基于Java开发的DWR框架从2.0开始提供了push功能,通过它建立的应用可以大大节省服务器的资源消耗。

DWR 2中提供的push功能是一种Comet方式,即长连接机制(long live http)。浏览器向服务器请求时,服务器一直保持着这个连接,在关闭之前都可以主动地推送数据给浏览器。下面是本系统中聊天模块的实现示例图:

  

图1-2 聊天模块实现

tag s:property must be empty, but is not

写struts2标签的时候遇到好多次这个问题。。

每次都匆忙地去检查action里面是不是为null、property的value是不是写错了。。

结果最后google都告诉我 是我没有加结束符……(<s:property value="xxx" />)特此笔记。。

no transaction in progress

用Spring做事务管理,在配JPA的时候出问题,原来用Hibernate的时候就没问题的,换JPA就报这个错:no transaction in progress

百度不到,google之,得解:

Use the spring transaction annotations (which must be enabled on the context) 
For getters use the @Transactional(propagation = Propagation.SUPPORTS). This will ensure a session will actually be openend. 
For create/update/delete use the @Transactional(propagation = Propagation.REQUIRED) to ensure that a either new transaction will be started, or the call on the DAO participates on the current transaction. 

 

原本只在IBaseDao上注明事务,现在要对每个方法都注解一下才可用,囧rz,不知道会是哪里出了问题。

unknown Oracle major version [0]

用Hibernate实现的JPA做ORM,连接数据库时报这个错误,看来是Hibernate不知道Oracle所用的版本,

百度一下,在Hibernate配置文件里面设置hibernate.dialect属性为org.hibernate.dialect.Oracle9iDialect即可(这里使用的是9i)。

Hello World, Seam!

嗯(⊙_⊙),用最简单的通讯录做一个Hello World, Seam!吧。

IDE用Eclipse JEE+JBoss Tools(主要是Seam Tools),前端JSF,会话bean和实体bean用EJB3。

功能就是CRUD。