java - Hibernate - 在 xml 中不相关对象上映射关联

标签 java xml hibernate

我有两门课:

  • 用户
  • 租车

    public class User implements Serializable{
        private String userName;
        private Integer userId;
        private String userParent;
    }
    
    public class RentedCar implements Serializable{
        private Date stopDate;
        private Date startDate;
        private String carName;
        private Integer carId;
        private Integer userId;   // Some userId from User.
    }
    

这些类有各自的hbm.xml 文件。基础表不相关。这意味着我知道 RentedCar 中的 userIdUser 中的 userId 关联,但没有 PK/FK 他们之间的关系。我需要在 RentedCarUser 之间添加多对一关联以及一对多关联在UserRentedCar 之间。我应该如何在 hbm.xml 文件中执行此操作?

这些是 xml 映射:

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

 <hibernate-mapping>
    <class name="User" table="user">
        <composite-id>
            <key-property name="userName" column="user_name" type="string"/>
            <key-property name="userParent" column="user_parent" type="string"/>
        </composite-id>
        <property name="userId" column="user_id" type="int"></property>
    </class>
 </hibernate-mapping>



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

 <hibernate-mapping>
    <class name="RentedCar" table="rented_car">
        <composite-id>
            <key-property name="stopDate" column="stop_date" type="date" />
            <key-property name="carId" column="car_id" type="int" />
            <key-property name="userId" column="user_id" type="int" />
        </composite-id>
        <property name="startDate" column="start_date" type="date"></property>
        <property name="carName" column="car_name" type="float"></property>
    </class>
 </hibernate-mapping>

最佳答案

我认为您的类中应该有一些内容表明存在一对多关系,以便在 hbm.xml 文件中执行此操作:

public class User implements Serializable{
    private String userName;
    private Integer userId;
    private String userParent;
    private Set<RentedCar> rentedCars;
}

public class RentedCar implements Serializable{
    private Date stopDate;
    private Date startDate;
    private String carName;
    private Integer carId;
    private User user; 
}

然后在 RentedCar.hbm.xml 中您可以在里面使用:

<many-to-one name="user" class="User">
        <column name="userId" not-null="true"></column>
 </many-to-one>

在 User.hbm.xml 中:

<set name="rentedCars" table="rented_car" fetch="select">
     <key>
          <column name="userId" not-null="true"></column>
     </key>
     <one-to-many class=" RentedCar "/>
 </set>

本教程可能对您有帮助 http://www.tutorialspoint.com/hibernate/hibernate_one_to_many_mapping.htm

关于java - Hibernate - 在 xml 中不相关对象上映射关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32381810/

相关文章:

java - 在单个 JFrame 上显示多个 JPanel 图像

java - 错误: cannot find symbol while calling toString method

java - Liquibase liquibase-maven-plugin 创建表,但在集成测试中找不到表 : org. hibernate.HibernateException

java - 查询性能不佳,选择少量字段比选择大量字段慢 10 倍

java - Spring + Hibernate 未插入数据库(@Transactional 不起作用)

java - 在共享路径中查找可用的java版本的jdk

java - 使用 Java 配置的 Spring 4 REST 应用程序(无 xml) IllegalArgumentException

android - 我可以将 View 附加到动画 View 吗?

python - 在python中使用lxml添加xml前缀声明

xml - R 中的 MLB XML 解析