初学hibernate 对其中的一些知识点还不是很清楚,请大家指教
假如我现在又一下一个POJO类public class Person{
    private long oid;
    private int id;
    private String name;
    private int age;
}现在我Person类有以下这么多个属性,可以想象还有许多的类和这个类之间存在关系!如果不用hibernate,我完全可以把id作为主键
但是老实说如果用hibernate这样不好.最好设计一个公共主键oid.这点我不是很明白为什么啊?什么情况下应该用公共主键,什么时候
就不用呢?还有一个问题,是说hibernate会自动认为你的第一个属性就是主键吗?
大家就这个主键的问题可以展开给我讲讲!谢谢

解决方案 »

  1.   

    什么是公共主键?建立一个无业务语义的id是很有必要的啊,用hibernate后而且可以选择主键的生成策略,对映射也是很有好处的
      

  2.   

    没懂你的意思啊,有一个无业务的主键就可以。至于主键的生成方式有你来决定,比如数据库生成,hibernate生成等。
      

  3.   

    主键就是一个coder用来区分其他记录(唯一确定一条记录)的东东,它和实际对象没有直接关系。
    如果你的id对于person来说是一个有意义的东西,那么设计另外一个字段。
      

  4.   

    如果有业务含义,那就没办法让数据库或者hibernate给你自动生成啦,当然你非得自己定义主键也不是不可以
      

  5.   

    如果定义的主键有业务含义,那在hibernate自动解析的时候,不知道怎么去解析成相应的SQL语句,所以会定义一个无业务含义的属性,hibernate会使用自身的算法来维护主键,如果一定要使用有业务含义的主键,就得有程序员来维护主键了
      

  6.   

    使用跟业务无关的主键不仅仅是hibernate的推荐方式,也是任何数据库设计的的推荐方式。因为,如果主键设置跟业务有关的话,以后需求稍有编号,可能会引起严重后果。比如原来的认为某个属性不会有重复值,单后来需求会导致某个属性有重复值。至于标记那个是id,可以在配置文件里面声明:<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>