shangshan3353 2009-07-11 22:10 采纳率: 100%
浏览 268
已采纳

有关hibernate一对一主键关联映射的问题

constrained="true" 和 这2个设置有什么区别啊, 不是已经表明他是共享主键吗,constrained="true" 也表明存在主键约束,那这2个区别是什么啊

  • 写回答

5条回答 默认 最新

  • fdsafds 2009-07-11 23:28
    关注

    例如user与room表格,可以如下建立:

    [code="sql"]CREATE TABLE user (
    id INT(11) NOT NULL auto_increment PRIMARY KEY,
    name VARCHAR(100) NOT NULL default ''
    );

    CREATE TABLE room (
    id INT(11) NOT NULL auto_increment PRIMARY KEY,
    address VARCHAR(100) NOT NULL default ''
    );[/code]

    User类别与Room类别的设计使用 一对一(唯一外键关联) 中的设计即可,接着在User.hbm.xml方面如下设计:

    User.hbm.xml
    [code="xml"]<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> [/code]

    在Room.hbm.xml的设计方面如下:

    Room.hbm.xml
    [code="xml"]<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> user [/code][color=red]在Room的id主键上,使用foreign表示与外键共享主键,也就是与User实体共享主键,而constrained设定为true,表示约束room的主键必须与user中对应资料的主键相同。[/color]

    一个储存的实例如下:

    [code="java"]User user1 = new User();
    user1.setName("bush");
    Room room1 = new Room();
    room1.setAddress("NTU-M8-419");

    // 互相设定关联
    user1.setRoom(room1);
    room1.setUser(user1);

    User user2 = new User();
    user2.setName("caterpillar");
    Room room2 = new Room();
    room2.setAddress("NTU-M8-418");

    // 互相设定关联
    user2.setRoom(room2);
    room2.setUser(user2);

    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();

    session.save(user1);
    session.save(user2);

    tx.commit();
    session.close();[/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line