当前位置: 首页 > 知识库问答 >
问题:

Hibernate一对一单向主键XML映射

蓬弘
2023-03-14

我试图在Hibernate中的两个表之间创建一对一的单向主键关系。我使用xml Maaping,下面是我的java POJO类和它们各自的。hbm文件。

public class Student {

    private Long studentId;
    private String name;
    private Locker locker;

    public Long getStudentId() {
        return studentId;
    }
    public void setStudentId(Long studentId) {
        this.studentId = studentId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Locker getLocker() {
        return locker;
    }
    public void setLocker(Locker locker) {
        this.locker = locker;
    }
}
<?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">

<hibernate-mapping>
    <class name="com.avinash.dto.Student" table="STUDENT">
        <id name="studentId" type="long" column="STUDENT_ID">
            <generator class="native"></generator>
        </id>

        <property name="name" type="string">
            <column name="NAME"></column>
        </property> 

        <one-to-one name="locker" class="com.avinash.dto.Locker" cascade="all" constrained="true">
        </one-to-one>

    </class>
</hibernate-mapping>

储物柜POJO类

public class Locker {
    private Long lockerId;
    private String location;
    ...
}

locker.hbm.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">

<hibernate-mapping>
    <class name="com.avinash.dto.Locker" table="LOCKER">
    <id name="lockerId" type="long" column="LOCKER_ID">
        <generator class="native"></generator>
    </id>
    <property name="location" type="string">
        <column name="LOCATION"></column>
    </property>
    </class>
</hibernate-mapping>

下面是我用来保存student和locker对象的主类。

public static void main(String[] args) {

    Session session = HibernateUtil.getSessionfactory().openSession();
    session.beginTransaction();

    Locker locker = new Locker();
    locker.setLocation("320, Building 1, First Floor");

    Student student = new Student();
    student.setName("Avinash");
    student.setLocker(locker);

    Serializable id = session.save(student);
    System.out.println("The id is " + id);
    session.getTransaction().commit();
    session.close();
   HibernateUtil.shutdown();
}
CREATE TABLE student
(
  student_id bigint NOT NULL,
  name character varying(255),
  CONSTRAINT student_pkey PRIMARY KEY (student_id),
  CONSTRAINT fk_fcwupt4ogu22gfes87gv8ctp4 FOREIGN KEY (student_id)
      REFERENCES locker (locker_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

CREATE TABLE locker
(
  locker_id bigint NOT NULL,
  location character varying(255),
  CONSTRAINT locker_pkey PRIMARY KEY (locker_id)
)

共有1个答案

鲜于喜
2023-03-14

我认为映射是正确的。问题出在数据库结构上:

请按下面的方式更改数据库,然后尝试:

CREATE TABLE student
(
  student_id bigint NOT NULL,
  name character varying(255),
  **locker bigint NOT NULL,**
  CONSTRAINT student_pkey PRIMARY KEY (student_id),
  CONSTRAINT fk_fcwupt4ogu22gfes87gv8ctp4 FOREIGN KEY **(locker)**
  REFERENCES locker (locker_id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION
)
 类似资料:
  • 我正在努力解决hibernate映射问题,即在订单表的主键和带有一些额外列的产品购物车的复合键之间映射一对多关系 产品购物车表具有组合键购物车ID和产品ID 我试着跟踪但没有成功 有人能帮我实现这一点吗?下面是错误消息 原因:组织。冬眠AnnotationException:非法尝试使用mappedBy关联pcoPK定义@JoinColumn。组织pk。冬眠cfg公司。Ejb3JoinColumn

  • 问题内容: 我正在尝试在Hibernate中将一对一关系映射为“零或一个”关系。我想我可能已经找到了使用多对一方法。 A类的映射指定: B类的映射指定: 我想在数据库中找不到B的匹配行时b为null。所以我可以做到这一点(在A类中): 但是,看来b永远不会为空。 我该怎么办? 问题答案: 答案是在A中的多对一语句中添加not-found =“ ignore”: 我尝试按照Rob H的建议,简单地向

  • 1. 前言 本节课程和大家一起聊聊一对多关联映射。通过本节课程,你将了解到: 如何实现一对多关联映射; 如何实现双向一对多关联映射; 关联映射中的级联操作。 2. 一对多关联映射 关系型数据库中表与表中的数据存在一对多(或多对一)关系。 如学生表、班级表。一个班级有多个学生,多个学生可以在同一个班级。 一对多或多对一本质上是一样的,如同一块硬币的正面和反面,只是看待事物的角度不同而已。 数据库中有

  • 我正在尝试我们非主键作为外键在我的应用程序。场景如下:我有EMPLOYEE和EMPLOYEE_PROPERTIES表。Employee和Employee属性之间存在一对多的关系。下面是我的架构: 下面是我的hibernate映射XML:------------------------------- -------------员工属性------------------- 是否可以引用非主键作为外键

  • 我正在使用与共享主键一对一映射。