suffer entity bean

昏天黑地的EJB作业终于是快做完了,还剩下一个testcase。
历时4-5天,期间犯下无数错误,很多是相当stupid的,记录一点点吧:

  1. persistence.xml,开头字母写成了大写,死活找不到datasource!!!

  2. persistence.xml,只能放在session bean的jar中,做的时候天真的以为多放一个地方没有关系,就屁颠屁颠地在ear里面也放了一个,代价就是花了大半天时间,始终得到nullPointException。

  3. baseDao中的id居然用了employeeId,然后contactEntity又去extends baseDao,这是最stupid的错误了,刚写的时候没有长远眼光,以为baseDao就只用于employee!咋会这么傻呢。。。貌似当时是以为contact和employee都是属于employee,结果后来设计改了只会,那里就成了一个巨大的黑洞,洗了我将近一天的时间(无尽的sql invalid identifier ->contactEntity.employeeId,还一直纳闷employeeId是怎么混进contactEntity的呢 )。

  4. mapping比较简单,没有什么好说。双向的时候记住加mappedBy就好。

  5. 由于id是由EJB负责的,当要往employee加contact的时候,因为是实时加入contact,而且同时又要更新employee_contact表(主键是这两个的id); 这样,获取id就成了个问题,已开始是觉得先persist,然后再调用,以为就有id了。事实是这样还是null,需要再多一个merge操作。merge是如果传入的obj不是scope内的,会先纳入到em管理范围,再返回这个obj,此时就有id了,perfect for this situation.

  6. 在jsp中要调用manyTOmany的比如getContacts,如果是laze loading的话,会出现exception。google一下发现n多人都遇到这个问题。原因是Hibernae会自动lazy load many to many,然后处理完会关闭session,如果在session以外调用,就会出问题。解决方法:1,改为eager,效率极低(我就这么干的……无奈)。2,spring中有filter可以帮助解决这个问题,可惜咱现在还没有用到。

几大错误基本已经列出,总体来说EJB还是很方便的,除了细节是太多要注意了!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s