【问题标题】:One-to-many mapping in hibernate休眠中的一对多映射
【发布时间】:2013-08-23 15:40:46
【问题描述】:

我的LevelTerm.hbm.xml 文件是:

 <hibernate-mapping>
<class name="com.entity.LevelTerm" table="level_term" catalog="test">
    <id name="levelId" type="java.lang.Integer">
        <column name="level_id" />
        <generator class="identity" />
    </id>
    <property name="level" type="int">
        <column name="level" not-null="true" />
    </property>
    <property name="term" type="int">
        <column name="term" not-null="true" />
    </property>
    <property name="session" type="int">
        <column name="session" not-null="true" />
    </property>

    <list name="list_course">

        <key column="level_id"/>
        <one-to-many column="course_code" class="com.entity.Course"/>
         </list>
      </class>
</hibernate-mapping>

而我的LevelTerm 班级是:

@Entity
public class LevelTerm  implements java.io.Serializable {

 @Id
 @GeneratedValue(strategy= GenerationType.AUTO)
 private Integer levelId;
 private int level;
 private int term;
 private int session;

 @OneToMany
 private List<Course>list_course;



public List<Course> getList_course() {
    return list_course;
}

public void setList_course(List<Course> list_course) {
    this.list_course = list_course;
}

public List<Student> getList_student() {
    return list_student;
}

public void setList_student(List<Student> list_student) {
    this.list_student = list_student;
}

public LevelTerm() {
}

public LevelTerm(int level, int term, int session) {
   this.level = level;
   this.term = term;
   this.session = session;
}

public Integer getLevelId() {
    return this.levelId;
}

public void setLevelId(Integer levelId) {
    this.levelId = levelId;
}
public int getLevel() {
    return this.level;
}

public void setLevel(int level) {
    this.level = level;
}
public int getTerm() {
    return this.term;
}

public void setTerm(int term) {
    this.term = term;
}
public int getSession() {
    return this.session;
}

public void setSession(int session) {
    this.session = session;
}

}

hibernate.cfg.xml的配置文件是:

<hibernate-configuration>
 <session-factory>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.current_session_context_class">thread </property>
  <property name="hibernate.hbm2ddl.auto">create</property>
  <mapping resource="com.entity/Student.hbm.xml"/>
  <mapping resource="com/entity/Address.hbm.xml"/>
  <mapping resource="com.entity/Course.hbm.xml"/>
  <mapping resource="com.entity/LevelTerm.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

我的代码应该在 MySQL 数据库中创建一个连接表“LEVEL_TERM_LIST_COURSE”。但是没有创建表。

【问题讨论】:

    标签: hibernate join hibernate-mapping


    【解决方案1】:

    不,您的映射不应该生成连接表。它看起来像一个单向的一对多关联,它将由many 端的外键管理(您的示例中的课程)。看看this example 和相关的解释。这是拥有one-to-many 关联的事实上的SQL 方式。

    另外,如果您需要一个连接表,您可能需要在 hibernate 文档中执行类似于 this example 的操作。基本上,如果您需要单向one-to-many 关联中的连接表,您可以使用many-to-many 元素并将unique 属性设置为true;这有效地使关联one-to-many

    【讨论】:

      猜你喜欢
      • 2011-04-07
      • 1970-01-01
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多