【问题标题】:hibernate not creating table but no error messages休眠不创建表但没有错误消息
【发布时间】:2017-01-17 13:05:45
【问题描述】:

我正在做一个spring-boot项目并尝试使用hibernate创建一个表,当我运行应用程序并且服务器正常启动时我没有收到任何错误,但是没有创建表。

StatusUpdate.java

package model;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.PrePersist;

@Entity
@Table(name="status_update")
public class StatusUpdate {

    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

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

    @Column(name="added")
    @Temporal(TemporalType.TIMESTAMP)
    private Date added;

    @PrePersist
    protected void onCreate() {
        if (added == null) {
            added = new Date();
        }
    }

    public StatusUpdate(String text) {
        this.text = text;
    }

    public StatusUpdate(String text, Date added) {
        this.text = text;
        this.added = added;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public Date getAdded() {
        return added;
    }

    public void setAdded(Date added) {
        this.added = added;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((added == null) ? 0 : added.hashCode());
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime * result + ((text == null) ? 0 : text.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        StatusUpdate other = (StatusUpdate) obj;
        if (added == null) {
            if (other.added != null)
                return false;
        } else if (!added.equals(other.added))
            return false;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        if (text == null) {
            if (other.text != null)
                return false;
        } else if (!text.equals(other.text))
            return false;
        return true;
    }

}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <tiles.version>3.0.7</tiles.version>
    </properties>

    <groupId>com.voja</groupId>
    <artifactId>spring-boot-tutorial</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-core</artifactId>
            <version>${tiles.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>${tiles.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>1.3.5.RELEASE</version>
        </dependency>
    </dependencies>

    <packaging>war</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

application.properties

debug=true

spring.datasource.url=jdbc:mysql://localhost:3306/springboottutorial
spring.datasource.username=springboot
spring.datasource.password=hello
spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true

logging.level.org.hibernate.SQL=DEBUG

我在spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect这一行的dialect 下也看到了一条黄线,上面写着`spring.jpa.hibernate.dialect' 是一个未知属性。你的意思是“spring.jpa.hibernate.ddl-auto”,以防万一这可能是个问题。

【问题讨论】:

  • 你的 persistence.xml 是什么样的?
  • 正如@911DidBush 提到的,请显示您的persistence.xml。参数 hbm2ddl.auto 在这里很重要。
  • 您可以将spring.jpa.show-sql=true 添加到您的application.properties 以查看更多日志。也许你能找到一些东西
  • @911DidBush 我是 java 和 spring 的新手。那个文件在哪里?如果我应该创建一个,我没有创建一个,我正在学习一个教程,但没有完成。
  • 我还将我的应用程序、属性文件添加到 Q 中。

标签: java eclipse hibernate spring-boot


【解决方案1】:

通过阅读另一篇文章发现了问题,实际上它们中的包和类存在问题,他们找不到另一个,因此没有创建表。

我创建了一个新项目并将所有类放在同一个包中并且它工作正常,所以我将在此基础上修复我现有的项目。

【讨论】:

    【解决方案2】:

    有时问题出现在您选择的属性名称中。像文本、值等都是数据库的保留关键字。因此,您可以看到创建表的日志,但不会创建表。要解决此问题,只需更改 bean 中的属性名称或提供明确的列名。

    示例:mysql 不支持属性或列名“值”。因此我的表没有创建。我必须将其重命名为“valueString”。

    希望这会有所帮助。

    【讨论】:

    • 我猜这应该是一个评论,你没有足够的声誉?
    【解决方案3】:

    它不适合你,因为你没有使用它,我的意思是,JPA 在需要时创建数据库。您可以尝试编写一个使用它的测试,或者添加一个 rest 存储库来尝试它,只需将其添加到您的 application.properties;

        spring.jpa.hibernate.ddl-auto=create
    

    然后创建这个接口:

        @RepositoryRestResource
        public interface IStatusRepository extends CrudRepository<StatusUpdate,   Long> {
      }
    

    你也需要这个依赖;

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
    

    创建一个测试更容易,但我猜你正在尝试构建一个 REST Web 服务,所以试试这个看看它是否有效 =)

    【讨论】:

    • 我不是想创建一个 REST Web 服务,只是一个基本的网站(按照教程)。有什么我可以添加到StausUpdate.jjava 以使其正常工作的吗?
    • 我用这个 application.properties 创建了你的同一个项目,它工作正常,用你的代码创建表没有任何问题:spring.datasource.url=jdbc:mysql://localhost:3306/suscripciones?useSSL=false spring.datasource.name = dataSource spring.datasource.username=root spring.datasource.password=root spring.jpa.hibernate.ddl-auto=create
    • 在 Eclipse 中吗?如果是这样,您能否压缩整个项目并将其上传到某个地方以便我进行比较?
    【解决方案4】:

    对于您的 application.properties 文件,请点击以下链接

    就像: spring.jpa.generate-ddl=true 然后添加 spring.jpa.hibernate.ddl-auto=create-drop

    http://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/htmlsingle/#common-application-properties

    【讨论】:

    • spring.jpa.generate-ddl=true 然后加上spring.jpa.hibernate.ddl-auto=create-drop
    【解决方案5】:

    如果您使用的是 jpa 和 hibernate,则在您的 application.properties 文件中添加以下属性

    spring.jpa.hibernate.ddl-auto=update
    

    【讨论】:

    • 把方言改成这样:org.hibernate.dialect.MySQLDialect
    • 尝试添加link中列出的所有属性
    【解决方案6】:

    尝试将其添加到您的 application.properties 中:

    spring.jpa.hibernate.ddl-auto=create
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 2016-02-03
      相关资源
      最近更新 更多