使用带有mysql的hibernate自动生成时,表创建的SQL不正确

时间:2015-11-08 17:14:18

标签: java mysql hibernate

我决定在本周末使用注释来玩hibernate并遇到一个有趣的问题,我希望你们都可以帮忙。我遇到的问题是,当我尝试使用ManyToOne关系时,创建的模式不正确。

我有两类注释。 User类和CourseTaken类。用户可以拥有任意数量的课程。代码如下。

@Entity
@Table(name = "course_taken")
public class CourseTaken {
    @Id
    @GeneratedValue
    @Column(name = "course_id", columnDefinition = "INT NOT NULL AUTO_INCREMENT")
    private int id;
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    ...getters/setters
}

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id", columnDefinition = "INT NOT NULL AUTO_INCREMENT")
    private int id;

    @OneToMany(mappedBy = "user")
    private Set<CourseTaken> coursesTaken = new HashSet<CourseTaken>();
    ...getters/setters
}

当我有hibernate生成模式时,这里是course_taken表的创建语句:

create table course_taken (course_id INT NOT NULL AUTO_INCREMENT not null, courseID integer not null, user_id INT NOT NULL AUTO_INCREMENT, primary key (course_id))

我试图使用@OneToMany注释时,Hibernate似乎很困惑。有什么想法吗?

我玩过各种配置: org.hibernate.dialect。

org.hibernate.dialect.MySQL5Dialect
org.hibernate.dialect.MySQLDialect
org.hibernate.dialect.MySQL5

我正在使用maven,这是我的hibernate pom依赖项:

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-osgi</artifactId>
            <version>5.0.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-envers</artifactId>
            <version>5.0.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>5.0.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-proxool</artifactId>
            <version>5.0.2.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-infinispan</artifactId>
        <version>5.0.2.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>5.0.2.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.5.6-Final</version>
    </dependency>

1 个答案:

答案 0 :(得分:0)

看起来我必须让我的方言有点不正确。以下似乎解决了这个问题

org.hibernate.dialect.MySQLDialect