今天上午突然想到了一个问题:怎样在对象被执久化后,获取他的主键(标识列)呢?
按以前的JDBC惯例,应是采用数据库查询时的倒序来获取最后一个标识列的值。
但思索一下,如果同时有几个用户在进行插入,不就很易出错啦!
所以我不能采用这个方式来处理,那方法只有两种。
A、在数据库里加一字段,来充当主键。在插入数据时先定义好主键,这样我就知道主键的值啦。
B、在hibernate中录求解决方法。
既然现在用的就是hibernate,那我们肯定要采用B方案,A方案为预备方案。
在网上找了一会,没有发现好的方法。
眼看就快无解啦!再怎么着我也不能选用A方案啊!那就失去了用hibernate的意义啊!
不干心,突然我想到了一个网友。这哥们,技术好,还很仗义,之前受他指点进步很大……
不敢再浪费时间,于时Q他。
从他的观点中,我得知。
hibernate在持久化对象后,会将传进来的对象补全。
如:
Bean bn=new Bean();
BeanDAO bd=new BeanDAO();
db.save(bn);
当我们再调bn的方法就能查寻到数据库里bn对象的所有信息,当相我们如要想调用这个持久化后的产物。
在传参处就可以拿得到,需要注意的是先要进进持久化(就是调save方法)。大家可能会有疑问,这里说
明下,被持久化后这个对象就会读到数据库里的信息。又因为对象是引用类型的,所以我们在未持久化时
传进来的是未持久化对象的引用,持久化后将数据填入的是同一个对象。
最近在弄MS的东东,这块有点生啦!
顺便带一笔,在MS往方法里传值时。如果传对引用类型的话,要在参数前加一个ref或out.
Bean bb=new Bean();
show(ref bb);
Console.WriteLine(bb.Name); ---如果不用ref传参的话,此处会抛空指针异常。
public void show(ref Bean bn)
{
bn.Name="gg";
Console.WriteLine(bn.Name);
}
大概方式如以上代码,当然你可能觉得ref和out是重复的。
这个你别着急MS不会做这么笨的事,他们是有差别的。
详情可以上msdn了解。需要注意的是,如果不用ref或out
进行传参时的定义,VS会报异常(红色部分).