java - 如何在 hbm.xml 文件中的 hibernate 中创建复合主键

标签 java mysql hibernate orm composite-primary-key

我有以下三个简单的类。 如何在我的Rating.hbm.xml 文件中映射Rating 类,更具体地说是其复合键? 我目前在 hibernate 文档中迷失了方向(5.1.2.1. 复合标识符)

每个评级可以由一本书和一个用户进行该特定评级。 每个用户可以进行多次评分。 每本书可以有多个评级。

类(class)

评级等级

    public class Rating {
        private User user;
        private Book book;
        private int rating;
        private Date timestamp;

        public Rating() {}  //No arg contructor for hibernate
    ... 
}

用户类别

public class User {
    private long userId;
    private String email, password;
    public User() {}
    ...
}

图书类(class)

public class Book {
    private long bookId;
    private String title;

    public Book() {}
    ...
}

最佳答案

首先,您应该创建一个复合主键类,如下所示:

public class RatingId implements Serializable{
private User user;
private Book book;
private int rating;
// an easy initializing constructor
public PurchasedTestId(User user, Book book, int rating){
this.user = user;
this.book = book;
this.rating= rating;
}

/*create your getter and setters plus override the equals and hashCode()  methods */ 


}

现在创建您的主要评级类,如下所示:

public class RatingBook {
RatingId RatingId;
private Date timestamp;

/* generate getters and setters for these two methods*/

}

您可以尝试以下操作:

<composite-id name=”ratingId”>
<key-property name="user" column="user"  />
<key-property name="book" column="book" />
<key-property name="rating" column="pid" />
</composite-id>

看看这是否适合你

关于java - 如何在 hbm.xml 文件中的 hibernate 中创建复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27642101/

相关文章:

java - Spring Boot 将 ObjectMapper 注入(inject) Kafka JsonDeserializer

MySQL:如何选择购买了带有附加配件的产品的客户

mysql - 如何在MySQL中进行批量插入

mysql - QueryDslJpaRepository.findAll 批量更新从更新 [0] 返回了意外的行数;实际行数 : 0; expected: 1

java - 强制执行刷新以获取新的主键 ID 来存储 EmbeddedId

java - Hibernate 尝试在 saveOrUpdate 方法中删除不存在表中的行

缺少 Java org.apache.poi.unsupportedfileformaexception

java - 将整数转换为罗马数字 - Java

java - 随机 map 生成如何工作

MySQL Innodb 索引困惑