对象被持久以后……

来源:互联网 发布:二分搜索递归算法 编辑:程序博客网 时间:2024/05/17 09:30

今天上午突然想到了一个问题:怎样在对象被执久化后,获取他的主键(标识列)呢?

按以前的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会报异常(红色部分).

 

 

 

 

原创粉丝点击