标签存档: hibernate

Maven多模块布局实例详解

一、开场白

使用Maven有段时间了,只能感慨真是个好东西,让我从传统模式体会到了严谨、规范、敏捷、方便的特性。
如果你懂Maven或许看过Juven翻译的《Maven权威指南》;
发个牢骚:由于Maven的出身问题导致学习曲线陡峭,所有有些人就开始说Maven不好用;原因有二:一是排斥Maven,二是没有耐心和精下心来学习,引用老毛的话来提醒我说的那些人:

没有调查就没有发言权

到了Maven这里就是(适用于技术方面):

没有深入学习也没有发言权

如果Maven不好那么Spring、Hibernate这些大家经常使用的框架为什么还是从ant转移到Maven?
如果Maven不好那么为什么国外大多数项目都在使用Maven呢?
原因自己考虑,我不废话!我的这些话就是告诫那些信口雌黄的人。

二、多模块布局概述

详细属性Maven的童鞋们都看过《Maven权威指南》,里面也讲解如何搭建多模块的Maven项目,但是那个毕竟是比较简单的,在实际应用中就有点水土不服了;
后来又参考了Juven的一篇《Maven最佳实践:划分模块》博文,相对权威指南来说介绍的比较详细了,但是这还是不能满足我真正在企业应用的需求,等你看完Juven的博文后再看看下面这个实际应用中的项目布局有什么异同:

Maven多模块布局概图

Maven多模块布局概图

OK,现在应该看出来有什么不同了,我的项目结构比权威指南里面的介绍复杂、比Juven的那篇文章说的也复杂,接下来再看看这张图片:

plexus-security项目结构

plexus-security项目结构


继续阅读 »

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: Maven多模块布局实例详解

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

工欲善其事必先利其器–Java Web快速开发框架–Springside

今天开始“工欲善其事必先利其器”系列第一篇,介绍目前可以快速开发并且有规范可维护性的开源框架——Springside

一、老板,来二两点废话:

如果你从事Java Web编程你会发现怎么那么多的技术或者框架,还有那么多关于的Java规范、协议;框架比如最著名的MVC框架Struts,持久化框架Hibernate,和解耦合Struts和Hibernate的Spring(虽然它现在不再是单一功能);这些框架的学习不是很困难,但是对于初学者或者需要快速构建项目的团队或者个人来说就需要花费成本构建新的项目,这无疑是项目初期的拦路虎。

关于这一点我是有过深的体会,去年给一个小公司开发一个小系统使用的架构就是我之前发布过的《个人账务管理系统》的架构,由于当时写这个架构的时候工作经验比较少,遇到的问题也不多,所以很多地方功能欠缺,而且不够灵活还有BUG……惭愧

二、推荐Springside

去年年底的一次偶然机会让我发现了Springside,以下简称为SS;关于SS的详细资料大家请到SS的官网查看,有这非常详细的WIKI文档而且在最新的3.3.4版本中白衣重新检查、调整了代码注释,使使用者可以很容易理解代码的意图。

SpringSide是以Spring Framework为核心,提供Pragmatic之中又适合工业化大规模开发的企业应用Kickstart。
如果说Sun的代码规范规定了大家在代码中如何命名变量,怎么编写注释的话,SpringSide则是以主流的技术选型、Pragmatic的编程实践来开发JavaEE企业级应用的总结与演示。

继续阅读 »

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: 工欲善其事必先利其器–Java Web快速开发框架–Springside

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

解决a different object with the same identifier value was already associated with the session错误

使用Hibernate三年了第一次遇到这个异常,常发生在一对多和多对多关系映射时,其实翻译一下很简单就是在Session中有两个相同标示但是又不是相同的实体,当进行保存或者更新(saveOrUpdate)时就爆出了这个错误,因为Hibernate不知道改怎么操作了,Google了一下发现解决办法很多,比如清空Session对象的缓存、刷新Session,但是这些都会导致后遗症的发生

一、清空Session缓存
也就是执行session.clean()方法,但是如果在clean之后再对对象saveOrUpdate就会报错:“Found two representations of same collection”,所以这个解决办法不可取

二、刷新Session

session.refresh(object)方 法就可以解决了,注意,当object不是数据库中已有数据的对象的时候,不能使用session.refresh(object)因为refresh是 从hibernate的session中去 重新取object,如果session中 没有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下

三、最好的解决办法:session.merge()

这个是我认为比较好的解决办法了,session里面有一个相同标示的对象,业务方法里也有一个相同标示的对象,把两个合并起来不就可以了,最后调用session.merge()更新到数据库,OK

四、Hibernate 疑难异常及处理

1、a different object with the same identifier value was already associated with the session。

错误原因:在hibernate中同一个session里 面有了两个相同标识但是是不同实体。

解决方法一:session.clean()

PS:如果在clean操作后面又进行了saveOrUpdate(object)等改变数据状态的操作,有可能会报出”Found two representations of same collection”异常。

解决方法二:session.refresh(object)

PS:当object不是数据库中已有数据的对象的时 候,不能使用session.refresh(object)因为该方法是从hibernate的session中去重新取object,如果session中没有这个对象,则 会报错所以当你使用saveOrUpdate(object)之前还需要判断一下。

解决方法三:session.merge(object)

PS:Hibernate里面自带的方法,推荐使用。

2、Found two representations of same collection

错误原因:见1。

解决方法:session.merge(object)

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: 解决a different object with the same identifier value was already associated with the session错误

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

Json-lib 与 hibernate 共同使用的问题

Posted by: Andres Almiray on 05/01/2008 原文

hibernate使用CGLIB把POJO的domain对象动态代理,实现它的魔法,但是给JSON的序列化带来了麻烦,因为JSON无法对lazy的属性进行序列化。有以下的四个方法可以解决hibernate的序列化问题

  1. domain类实现JSONString接口
  2. 建立JsonConfig实例,并配置属性排除列表
  3. 用属性过滤器
  4. 写一个自定义的JsonBeanProcessor

1. 实现JSONString接口是侵入性最强的方法

public class Person implements JSONString {
   private String name;
   private String lastname;
   private Address address;
 
   // getters & setters
 
   public String toJSONString() {
      return "{name:'"+name+"',lastname:'"+lastname+"'}";
   }
}
<span class="zbench-more-link"> <a href="http://www.wsria.com/archives/724#more-724" class="more-link">继续阅读 &raquo;</a></span>

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: Json-lib 与 hibernate 共同使用的问题

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

使用hibernate和json-lib时忽略属性和集合

在使用Java语言开发项目的时候一般都是使用SSH架构,基本上大家没有例外,目前流利的Ajax技术给我们开发的系统了带来了不少的改善和性能方面的提高,去年开始学习了jQuery框架,因为使用Java语言做为后台而且jQuery中使用是目前数据结构良好的且方便的JSON做为数据传输方式,所以就在JSON官网找到了json-lib这个第三方JAR包,后来学习了一下就在finance系统中试用了一下,感觉不错;但是也遇到了一些问题,比如当我们映射了hibernate对象后,两个表做了关联,如下例子:

1
2
3
4
5
CREATE TABLE people(id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(20) NOT NULL);   
 
CREATE TABLE location(id BIGINT NOT NULL AUTO_INCREMENT,
        peopleId BIGINT NOT NULL,addr VARCHAR(20) NOT NULL,PRIMARY KEY(id,peopleId));

继续阅读 »

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: 使用hibernate和json-lib时忽略属性和集合

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website

Hibernate的映射类型 hibernate mysql映射类型

Hibernate 映射类型 Java 类型 标准 SQL 类型 大小和取值范围
integer 或者 int int 或者 java.lang.Integer INTEGER 4 字节
long long? Long BIGINT 8 字节
short short? Short SMALLINT 2 字节
byte byte? Byte TINYINT 1 字节
float float? Float FLOAT 4 字节
double double? Double DOUBLE 8 字节
big_decimal java.math.BigDecimal NUMERIC NUMERIC(8,2)8 位
character char? Character? String CHAR(1) 定长字符
string String VARCHAR 变长字符串
boolean boolean? Boolean BIT 布尔类型
yes_no boolean? Boolean CHAR(1) (Y-N) 布尔类型
true_false boolean? Boolean CHAR(1) (T-F) 布尔类型

2 、 Java 时间和日期类型的 Hibernate 映射

映射类型 Java 类型 标准 SQL 类型 描述
date util.Date 或者 sql.Date DATE YYYY-MM-DD
time Date??? Time TIME HH:MM:SS
timestamp Date?? Timestamp TIMESTAMP YYYYMMDDHHMMSS
calendar calendar TIMESTAMP YYYYMMDDHHMMSS
calendar_date calendar DATE YYYY-MM-DD

3 、 Java 大对象类型的 Hibernate 映射类型

映射类型 Java 类型 标准 SQL 类型 MySQL 类型 Oracle 类型
binary byte[] VARBINARY( 或 BLOB) BLOB BLOB
text String CLOB TEXT CLOB
serializable Serializable 接口任意实现类 VARBINARY( 或 BLOB) BLOB BLOB
clob java.sql.Clob CLOB TEXT CLOB
blob java.sql.Blob BLOB BLOB BLOB

在程序中通过 Hibernate 来保存 java.sql.Clob 或者 java.sql.Blob 实例时,必须包含两个步骤:

在一个数据库事务中先保存一个空的 Blob 或 Clob 实例。

接着锁定这条记录,更新上面保存的 Blob 或 Clob 实例,把二进制数据或文本数据写到 Blob 或 Clob 实例中

原创文章,转载请注明: 转载自what is the RIA? just it…||咖啡兔

本文链接地址: Hibernate的映射类型 hibernate mysql映射类型

无觅相关文章插件,快速提升流量

咖啡兔

一只咖啡兔,热爱开源,喜欢追踪、研究新技术,向往背包游…… 讲究效率,坚信:“工欲善其事必先利其器” 使用Linux(Ubuntu),基于Java和jQuery开发企业RIA应用

More Posts - Website