Hibernate项目开发总结

1:当对持久态对象进行更该时,会保持未被更该的字段值;但如果是自由态进行更新时,则未被更新的字段值为null;(注意持久态包括引用子段值也会自动给保存)


2: 在一对多关系对象中,删除一个对象(如果该对象没有级联)则不会删除对应关系的对象,反之则反;



3:在Form表单中用List<ObjectType>=new ArrayList();来收集数据并设置默认值时,可以不使用泛型。


4:但是用Hibernate查找数据时,若没报任何异常,则可去看看数据库该字段是否为Char类型.若为Char类型字段则需在Hql语句中加上 rtrim();例如 String hql="form User u where rtrim(u.name)=a";


5:但数据库某个字段为Char类型型时,但根据该字段去查值若出现查不到值时,则是未把该值string.trim() 去空。


6:编写了一个Struts Form表单一个java.util.data转换器;要仔细注意所导入的类


7:在一级二级三级的ID都必须是唯一键


8:<c:choose><c:when test=""></c:when></c:choose>只能单一选择;而<c:if test=""></c:if>可以多项选择判断


9:修改系统默认的 profile
   alter profile default limit connect_time unlimited


10:多字段模糊匹配关键字查询:
   对于SqlServer  可以SELECT * FROM orders o where concat(o.email,o.address) like like '%df%';
   对于Oracl select * from engage_resume where (human_name || human_address || human_postcode) like '%塑料袋减肥%'


11:在many-to-one 中的两个实体中如果两个表相映射的字段类型不完成一样则在映射加载时会报错.如一个表 cust_no 类型:char(17)  另一个表 nvarchar(17);


12:默认 inverse="false"  含义:允许当前当这端维护关系,true表示对方维护关系;


13:当使用聚合函数sum()所查询的结果集没有时,则返回的session.createQuery(hql).setParameter(0, ordId).uniqueResult()为null;如果不判断则会报错。


14:在实体关系配置文件中  fetch="select|join"  两个值,默认为select;如果设为join则会通过select语句使用外连接来加载其关联实体或集合;


15:实体收集可以 user.role.roleid  但要注意 user 的对象要把 role=new role() 才行;


16:Set集合排序,只需在<set order by="column"></set>  则可以排序了(默认Set集合是无序的)。


17:在使用hql查询时 select cust.custNo,ord.odrId from Orders ord left join  ord.odrCustomer cust  可以返回List<object[]>  若是select ord.odrId from Orders ord left join  ord.odrCustomer cust则不能返回object[] 数组;


18:hql占位符下标从0开始;

 

19:Hql语句Order by 字段不可用别名;



你可能感兴趣的:(JOIN,Hibernate,数据库,struts,null,sqlserver)