Hibernate没有创建表

时间:2015-04-30 11:56:47

标签: java mysql spring hibernate jpa

我实现了Spring + Hibernate Web应用程序。在这个应用程序中,我有三个实体如下:

用户:

@Entity
@Table(name = "tbl_user")
public class User {

    @Id
    private long userId;

    @Column(nullable = false)
    private String username;
    @Column(nullable = false)
    private String password;
    private Calendar joinDate;
    private String mobile;
    private String displayName;
    private boolean active;
    private boolean searchable;
    @ManyToMany(mappedBy = "joinedUsers")
    private Collection<Session> joinedSessions;
    @OneToMany(mappedBy = "sender")
    private Collection<Message> messages;

    ////getters and setters
}

会话:

@Entity
@Table(name = "tbl_session")
public class Session {

    @Id
    private long sessionId;
    private Calendar startDate;
    @ManyToMany
    @JoinTable(
            name = "tbl_user_session",
            joinColumns = {@JoinColumn(name = "sessionId")},
            inverseJoinColumns = {@JoinColumn(name = "userId")}
    )
    private Collection<User> joinedUsers;
    @OneToMany(mappedBy = "session")
    private Collection<Message> messages;

        ////getters and setters
}

消息:

@Entity
@Table(name = "tbl_message")
public class Message {

    @Id
    private long messageId;

    @ManyToOne
    private User sender;
    @ManyToOne
    private Session session;
    private Calendar sendDate;
    private String content;
    private boolean mediaMessage;
    private boolean sent;
    private boolean read;        
   ////getters and setters
}

我已将hibernate.dialect设为org.hibernate.dialect.MySQL5InnoDBDialect,将hibernate.hbm2ddl.auto设为create

当我运行tomcat时,将成功创建JPA会话,并且将创建表tbl_usertbl_sessiontbl_user_session,但hibernate不会创建tbl_message

服务器日志:

Hibernate: 
    alter table tbl_message 
        drop 
        foreign key FK_4unouf9cqiw2e35a7mae9latk
Hibernate: 
    alter table tbl_message 
        drop 
        foreign key FK_h06m8p8o7furulj37xh4fd7s7
Hibernate: 
    alter table tbl_user_session 
        drop 
        foreign key FK_o9ow3kvh6odmn7raj1r10ninx
Hibernate: 
    alter table tbl_user_session 
        drop 
        foreign key FK_j33qeb6km5ffswqfcms9c3xqj
Hibernate: 
    drop table if exists tbl_message
Hibernate: 
    drop table if exists tbl_session
Hibernate: 
    drop table if exists tbl_user
Hibernate: 
    drop table if exists tbl_user_session
Hibernate: 
    create table tbl_message (
        messageId bigint not null,
        content varchar(255),
        mediaMessage bit not null,
        read bit not null,
        sendDate datetime,
        sent bit not null,
        sender_userId bigint,
        session_sessionId bigint,
        primary key (messageId)
    ) ENGINE=InnoDB
Hibernate: 
    create table tbl_session (
        sessionId bigint not null,
        startDate datetime,
        primary key (sessionId)
    ) ENGINE=InnoDB
Hibernate: 
    create table tbl_user (
        userId bigint not null,
        active bit not null,
        displayName varchar(255),
        joinDate datetime,
        mobile varchar(255),
        password varchar(255) not null,
        searchable bit not null,
        username varchar(255) not null,
        primary key (userId)
    ) ENGINE=InnoDB
Hibernate: 
    create table tbl_user_session (
        sessionId bigint not null,
        userId bigint not null
    ) ENGINE=InnoDB
Hibernate: 
    alter table tbl_message 
        add constraint FK_4unouf9cqiw2e35a7mae9latk 
        foreign key (sender_userId) 
        references tbl_user (userId)
Hibernate: 
    alter table tbl_message 
        add constraint FK_h06m8p8o7furulj37xh4fd7s7 
        foreign key (session_sessionId) 
        references tbl_session (sessionId)
Hibernate: 
    alter table tbl_user_session 
        add constraint FK_o9ow3kvh6odmn7raj1r10ninx 
        foreign key (userId) 
        references tbl_user (userId)
Hibernate: 
    alter table tbl_user_session 
        add constraint FK_j33qeb6km5ffswqfcms9c3xqj 
        foreign key (sessionId) 
        references tbl_session (sessionId)

提前感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

create table tbl_message (
    messageId bigint not null,
    content varchar(255),
    mediaMessage bit not null,
    read bit not null,
    sendDate datetime,
    sent bit not null,
    sender_userId bigint,
    session_sessionId bigint,
    primary key (messageId)
) ENGINE=InnoDB

此sql失败,因为Read是保留规则,应该成为:

create table tbl_message (
    messageId bigint not null,
    content varchar(255),
    mediaMessage bit not null,
    `read` bit not null,
    sendDate datetime,
    sent bit not null,
    sender_userId bigint,
    session_sessionId bigint,
    primary key (messageId)
) ENGINE=InnoDB

自己创建表,或者为带有注释的列指定另一个名称。