在休眠状态下没有外键的一对多

ecl*_*pse 3 java sql eclipse hibernate hsqldb

我有2节课用餐和日.一天可以吃几顿饭,一天可以送几顿饭.我存储了一天的物品,包括一天的所有餐点.还有一个没有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>
Run Code Online (Sandbox Code Playgroud)

所以现在使用这些地图我得到两个表:
膳食
ID名称----> DATE <----错误


DATE

这是胡说八道,因为一顿饭可以超过一天被切断.吃饭时我不想要外键.我怎么能意识到这一点?谢谢

cde*_*zaq 5

你不能.通过一天吃一顿饭和一天吃多餐,你必须有多对多的关系.

为此,您必须在Meal和Day表之间有一个关联表.

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