hibernate 的自增长主键是否不能改。

攻程狮… 2009-05-19 09:15:50
Parent.hbm.xml:
<class name="org.echo.hibernate.Parent" table="parent">
<id name="pid">
<column name="pid"></column>
<generator class="native">
</generator>
</id>
<property name="name"></property>
<set name="childs" inverse="true" cascade="all,delete-orphan">
<key column="pid"></key>
<one-to-many class="org.echo.hibernate.Child"/>
</set>
</class>

Child.hbm.xml:
<class name="org.echo.hibernate.Child" table="child">
<id name="cid">
<column name="cid"></column>
<generator class="native">
</generator>
</id>
<many-to-one name="parent" column="pid" not-null="true"></many-to-one>
</class>


public void testUpdateParent(){
Session session = null;
try {
session = HibernateUtil.getSession();
session.beginTransaction();
Parent parent = (Parent)session.load(Parent.class, 26);
parent.setPid(44);
session.save(parent);
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtil.closeSession(session);
}
}

我本来是想测一下级联,改动父对象的ID,然后引用的子对象的外键也变。但就报了

org.hibernate.HibernateException:identifier of an instance of org.echo.hibernate.Parent

was altered from 26 to 44
网上找了找也没有发现找到答案。。我的疑问是hibernate 的自增长主键是否不能改。
...全文
114 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dudu3052 2009-05-20
  • 打赏
  • 举报
回复
如果你用的数据库是Mysql的话,那么id的生成策略在Hibernate配置文件中的 generator class="native"代表的是auto_increment。
如果有级联的话,你是不能单独改变其id值的。不然你可以去掉级联的关系,再改变id的值,然后加上住外键的关系就行了。
sj2love0qh 2009-05-20
  • 打赏
  • 举报
回复
自增长的话。是在数据库执行sql语句的时候,把自增的字段自动根据原则设值的。你传进去的值,数据库根本不予理会。所以是不能手动设置的
攻程狮… 2009-05-20
  • 打赏
  • 举报
回复
呵呵,这个贴子没有吸引力。。晚上就结贴吧。。第一次发贴。。感谢加贴的CSDNer..
攻程狮… 2009-05-20
  • 打赏
  • 举报
回复
好像也是不可以的。我单独测了一下。child也是不能改他的id。我想自增长是不能改的。。也测试了一下新增加一个child,即使手动给一个id ,插入后也没有用手动给的id.
lvkai0452 2009-05-20
  • 打赏
  • 举报
回复
是啊,主键是不能修改的,如果配置成自增,用外键关联吧

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧