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
这是胡说八道,因为一顿饭可以超过一天被切断.吃饭时我不想要外键.我怎么能意识到这一点?谢谢
你不能.通过一天吃一顿饭和一天吃多餐,你必须有多对多的关系.
为此,您必须在Meal和Day表之间有一个关联表.
默认情况下,如果可以,Hibernate将尝试在表上使用外键,因为它允许数据库帮助确保数据的一致性和正确性,并且由于大多数关系数据库使用外键创建的隐式索引,因此通常也会更快.