java - hibernate 中没有外键的一对多

标签 java sql eclipse hibernate hsqldb

我有 2 个类(class)的膳食和日间。 一天可以吃几顿饭,一顿饭可以分几天吃。 我将一天的所有餐点都存储在 Day 对象中。 还有一个没有 Day 类型属性的 Meal 对象。 代码如下所示:

public class Day {
Date date;
private Map<Meal, List<Integer>> mealsLines;

public Day() {
} ....
}


public class Meal implements java.io.Serializable {
private long id;
private String name;

public Meal() {
} ....


<hibernate-mapping>
<class name="data.Day" table="DAY">
    <id name="date" type="java.sql.Date" access="field">
        <column name="DATE" />
        <generator class="assigned" />
    </id>
    <map name="mealsLines" table="MEAL" lazy="true" access="field">
        <key>
            <column name="DATE" />
        </key>
        <map-key type="data.Meal"></map-key>
        <one-to-many class="data.Meal" />
    </map>
</class>
</hibernate-mapping>


<hibernate-mapping>
<class name="data.Meal" table="MEAL">
    <id name="id" type="long">
        <column name="ID" />
        <generator class="identity" />
    </id>
    <property name="name" type="java.lang.String" access="field">
        <column name="NAME" />
    </property>
</class>
</hibernate-mapping>

现在有了这些 map ,我得到了两个表格:
用餐
ID NAME ----> DATE <---- 错误


日期

这是无稽之谈,因为一顿饭可以断绝不止一天。 我不想在用餐时使用外键。我怎样才能意识到这一点? 谢谢

最佳答案

你不能。通过多天吃一顿饭和一天吃多顿饭,您必须具有多对多关系。

为此,您必须在膳食表和日期表之间有一个关联表。

默认情况下,Hibernate 会尝试在表上使用外键,因为它允许数据库帮助确保数据的一致性和正确性,而且由于大多数关系数据库使用外键创建的隐式索引,它通常速度更快。

关于java - hibernate 中没有外键的一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8975207/

相关文章:

java - spring-boot-maven-plugin 不会创建 fat jar

java - Java 线程库

sql - SELECT 中的 MSSQL cast( [varcharColumn] to int) 在 WHERE 子句过滤掉错误值之前执行

java - 如何使用 eclipse 编译器进行独立的即时内存编译?

java - 如何在 Android 上使用拉丁重音字母?

java - bundle 失去值(value)

java - 解码 UTF-16 文本

sql - 工作停止日期为空意味着什么?

java - SQLite插入查询错误

java - 使用 Eclipse 的 Maven/Gradle 工作覆盖示例