【问题标题】:Another pojo class is not creating table in database in hibernate另一个 pojo 类没有在休眠中的数据库中创建表
【发布时间】:2016-09-28 12:05:52
【问题描述】:

TrainingDays.java

package com.hibernate;

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "TrainingDays")
public class TrainingDays {

    @Id
    @GeneratedValue
    private int TD_Id;

    private String T_Days;

    public int getTD_Id() {
        return TD_Id;
    }

    public void setTD_Id(int tD_Id) {
        TD_Id = tD_Id;
    }

    public String getT_Days() {
        return T_Days;
    }

    public void setT_Days(String t_Days) {
        T_Days = t_Days;
    }

    @OneToMany(cascade={CascadeType.ALL})
    @JoinColumn(name="TD_Id")
    private Set<TrainingTime> trainingTime;

    public Set<TrainingTime> getTrainingTime() {
        return trainingTime;
    }

    public void setTrainingTime(Set<TrainingTime> trainingTime) {
        this.trainingTime = trainingTime;
    }

}

TrainingTime.java

    package com.hibernate;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "TrainingTime")
public class TrainingTime {

    @Id
    @GeneratedValue
    private int TT_Id;

    @ManyToOne
    @JoinColumn(name = "TD_Id")
    private TrainingDays trainingDays;

    private String time;

    private String desc;

    public int getTT_Id() {
        return TT_Id;
    }

    public void setTT_Id(int tT_Id) {
        TT_Id = tT_Id;
    }

    public TrainingDays getTrainingDays() {
        return trainingDays;
    }

    public void setTrainingDays(TrainingDays trainingDays) {
        this.trainingDays = trainingDays;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

}

Hibernate.cfg.xml


"-//休眠/休眠配置 DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<session-factory>
    <property name="hbm2ddl.auto">update</property>
    <property name="dialect">org.hibernate.dialect.OracleDialect</property>
    <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
    <property name="connection.username">blueHeaven</property>
    <property name="connection.password">123456</property>
    <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.format_sql">true</property>


    <mapping class="com.hibernate.Rodie" />
    <mapping class="com.hibernate.TrainingTime" />
    <mapping class="com.hibernate.TrainingDays" />


</session-factory>

在数据库中创建了 TraningDays 表,但未创建 traningTime 表。

有人可以帮忙吗?

【问题讨论】:

  • 你在启动应用时,有没有报错?
  • 您在TrainingDays 中的@OneToMany 中错过了mappedBy = "trainingDays"
  • 添加代码后出现此错误

标签: java hibernate


【解决方案1】:

请更正您的代码:

课堂培训日

@Entity
@Table(name = "TrainingDays")
public class TrainingDays {

    @OneToMany(cascade={CascadeType.ALL},mappedBy = "trainingDays")
    private Set<TrainingTime> trainingTime;

}

课程训练时间

@Entity
@Table(name = "TrainingTime")
public class TrainingTime {


    @ManyToOne
    @JoinColumn(name = "TD_Id")
    private TrainingDays trainingDays;

}

创建双向时需要指定“mappedBy” 关系。

【讨论】:

  • 我也试过你的代码,但它仍然没有在数据库中创建 TrainingTime 表。
【解决方案2】:

因为映射是双向的。请像这样尝试。

TrainingDays.java

import java.io.Serializable;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "TrainingDays")
public class TrainingDays implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="TD_Id")
    private int TD_Id;

    @Column(name="T_Days")
    private String T_Days;

    @OneToMany(mappedBy="trainingDays")
    private Set<TrainingTime> trainingTime;

    public int getTD_Id() {
        return TD_Id;
    }

    public void setTD_Id(int tD_Id) {
        TD_Id = tD_Id;
    }

    public String getT_Days() {
        return T_Days;
    }

    public void setT_Days(String t_Days) {
        T_Days = t_Days;
    }

    public Set<TrainingTime> getTrainingTime() {
        return trainingTime;
    }

    public void setTrainingTime(Set<TrainingTime> trainingTime) {
        this.trainingTime = trainingTime;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }
}

TrainingTime.java

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "TrainingTime")
public class TrainingTime implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="TT_Id")
    private int TT_Id;

    @Column(name="time")
    private String time;

    @Column(name="desc")
    private String desc;

    @ManyToOne
    @JoinColumn(name="TD_Id")
    private TrainingDays trainingDays;

    public int getTT_Id() {
        return TT_Id;
    }

    public void setTT_Id(int tT_Id) {
        TT_Id = tT_Id;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public TrainingDays getTrainingDays() {
        return trainingDays;
    }

    public void setTrainingDays(TrainingDays trainingDays) {
        this.trainingDays = trainingDays;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }
}

始终在声明所有列后尝试应用映射。

【讨论】:

  • 谢谢。但根据您的代码,它仍然没有创建 TrainingTime 表。
【解决方案3】:

我得到了这个问题的解决方案,

在 TrainingTime Pojo 类中我创建了一个名为“Desc”的变量,我发现这个关键字已经被保留,所以可以这样命名任何变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多