关于hibernate中id的有关问题(应该很基础,希望大家指教)
阅读
初学hibernate 对其中的一些知识点还不是很清楚,请大家指教
假如我现在又一下一个POJO类
- Java code
public class Person{ private long oid; private int id; private String name; private int age; }
现在我Person类有以下这么多个属性,可以想象还有许多的类和这个类之间存在关系!如果不用hibernate,我完全可以把id作为主键
但是老实说如果用hibernate这样不好.最好设计一个公共主键oid.这点我不是很明白为什么啊?什么情况下应该用公共主键,什么时候
就不用呢?
还有一个问题,是说hibernate会自动认为你的第一个属性就是主键吗?
大家就这个主键的问题可以展开给我讲讲!谢谢
------解决方案--------------------
主键就是一个coder用来区分其他记录(唯一确定一条记录)的东东,它和实际对象没有直接关系。
如果你的id对于person来说是一个有意义的东西,那么设计另外一个字段。
------解决方案--------------------
如果有业务含义,那就没办法让数据库或者hibernate给你自动生成啦,当然你非得自己定义主键也不是不可以
------解决方案--------------------
如果定义的主键有业务含义,那在hibernate自动解析的时候,不知道怎么去解析成相应的SQL语句,所以会定义一个无业务含义的属性,hibernate会使用自身的算法来维护主键,如果一定要使用有业务含义的主键,就得有程序员来维护主键了
------解决方案--------------------
学习
------解决方案--------------------
------解决方案--------------------
使用跟业务无关的主键不仅仅是hibernate的推荐方式,也是任何数据库设计的的推荐方式。
因为,如果主键设置跟业务有关的话,以后需求稍有编号,可能会引起严重后果。比如原来的认为某个属性不会有重复值,单后来需求会导致某个属性有重复值。
至于标记那个是id,可以在配置文件里面声明:
- XML code
<id name="propertyName" (1) type="typename" (2) column="column_name" (3) unsaved-value="null|any|none|undefined|id_value" (4) access="field|property|ClassName"> (5) node="element-name|@attribute-name|element/@attribute|." <generator class="generatorClass"/> </id>
------解决方案--------------------
11楼的例子已经很形象了.
------解决方案--------------------
相当于一个标记,以免某些情况跟业务层发生冲突^
------解决方案--------------------
你所谓的公共主键就是一个与业务逻辑无关的代理主键,这样是为了跟业务逻辑分开
------解决方案--------------------
顶阅读上一篇:java配置文件,该如何处理 下一篇:返回列表