当前位置: 首页 > 知识库问答 >
问题:

DropwizardHibernate配置

潘俊楚
2023-03-14

我是Dropwizard的新手,到目前为止一切都很顺利,直到我开始使用Hibernate和MySQL。我的问题是:Hibernate不会创建表,因此我的数据库中没有列。

运行jar文件时,我得到的唯一警告是:

< code >找不到org . hibernate . CFG . environment hibernate . properties

但是我真的需要它吗?因为我已经有了所有的配置和映射。

这是我的应用程序类:

    public class LibraryApplication extends Application<LibraryConfiguration> {

    public static void main(String[] args) throws Exception {
        new LibraryApplication().run(args);
    }


    @Override
    public String getName() {
        return "hello backend";
    }


    private final HibernateBundle<LibraryConfiguration> hibernate = new HibernateBundle<LibraryConfiguration>(Book.class){ //more entities can be added separated with a coma
        public DataSourceFactory getDataSourceFactory(LibraryConfiguration configuration) {
            return configuration.getDataSourceFactory();
        }
    };


    @Override
    public void initialize(Bootstrap<LibraryConfiguration> bootstrap) {

        bootstrap.addBundle(new AssetsBundle("/webapp", "/", "index.html", "static"));
        bootstrap.addBundle(hibernate);
    }

    @Override
    public void run(LibraryConfiguration configuration,
            Environment environment) {

        final BookDAO dao = new BookDAO(hibernate.getSessionFactory());

        final TestResource resource = new TestResource(
                configuration.getTemplate(), configuration.getDefaultName());


        final TemplateHealthCheck healthCheck = new TemplateHealthCheck(
                configuration.getTemplate());


        environment.healthChecks().register("template", healthCheck); //register the health check
        environment.jersey().register(resource); //register the resource class
        environment.jersey().register(new BookResource(dao));
    }

}

YAML文件:

    server:
  type: simple
  rootPath: '/api/*'
  applicationContextPath: /
  connector:
    type: http
    port: 8080

template: Hello, %s!
defaultName: back-end


database:
  # the name of your JDBC driver
  driverClass: com.mysql.jdbc.Driver 

 # the JDBC URL
  url: jdbc:mysql://localhost:3306/books   

  # the username
  user: root

  # the password
  password: root

  # any properties specific to your JDBC driver:
  properties:
    charSet: UTF-8
    hibernate.dialect: org.hibernate.dialect.MySQLDialect  #org.hibernate.dialect.MySQL5InnoDBDialect  
    hibernate.hbm2ddl.auto: create

配置类:

    public class LibraryConfiguration extends Configuration{

    @Valid
    @NotNull
    @JsonProperty
    private DataSourceFactory database = new DataSourceFactory();

    @JsonProperty("database")
    public DataSourceFactory getDataSourceFactory() {
        return database;
    }

    @NotEmpty
    private String template;

    @NotEmpty
    private String defaultName = "";

    @JsonProperty
    public String getTemplate() {
        return template;
    }

    @JsonProperty
    public void setTemplate(String template) {
        this.template = template;
    }

    @JsonProperty
    public String getDefaultName() {
        return defaultName;
    }

    @JsonProperty
    public void setDefaultName(String name) {
        this.defaultName = name;
    }
}

和我的实体:

@Entity
@Table(name = "book")
@NamedQueries({
@NamedQuery(
name = "library.core.Book.findAll",
query = "SELECT b FROM book b"
    )
})
public class Book{

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column
    private Long id;

    @Column(name = "title")
    @NotNull
    private String title;

    @Column(name = "author")
    @NotNull
    private String author;

    @Column(name = "date")
    private long date;

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

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

    public Book(String title, String author){
        this.title = title;
        this.author = author;
    }

    @JsonProperty
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @JsonProperty
    public Long getId() {
        return id;
    }



    @JsonProperty
    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    @JsonProperty
    public long getDate() {
        return date;
    }

    public void setDate(long date) {
        this.date = date;
    }

    @JsonProperty
    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @JsonProperty
    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public void setId(Long id) {

        this.id = id;
    }
}

我已经看过很多教程,但没有一个真正解释了如何配置hibernate。提前谢谢你。

共有1个答案

唐炜
2023-03-14

我终于解决了这个问题,实际上没什么大不了的。正如预期的那样,只是一个小错误。

我的问题是一个Book类,IDE自动导入了库应用程序类中名为Book的java库,因此DB没有映射它。

另一方面,在Book类中,命名查询应该如下所示:

@NamedQuery(
name = "library.core.Book.findAll",
query = "SELECT b FROM Book b"
    )

我的错误:我用小写字母写书。

 类似资料:
  • exVim 的配色由三部分组成: 你自己的Vim配色, exVim 插件的语法高亮和插件的配色. 你可以按照以下步骤来定制你的配色: 安装你的配色 exVim 提供了三种方法安装你的自定义配色 方法1. 在 ex-colorscheme 中安装(推荐) 首选的方法是在 ex-colorschemes 中安装自己的配色, 这种方法仅仅需要你把自己的配色文件放到 vimfiles/bundle/ex-

  • 目录: 在配置项目yml文件中: 问题: null 客户端YML: 有没有人知道我怎样才能在这两种情况下只带一个配置文件?

  • 丰富的过滤器插件的存在是 logstash 威力如此强大的重要因素。名为过滤器,其实提供的不单单是过滤的功能。在本章我们就会重点介绍几个插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!

  • Codec 是 logstash 从 1.3.0 版开始新引入的概念(Codec 来自 Coder/decoder 两个单词的首字母缩写)。 在此之前,logstash 只支持纯文本形式输入,然后以过滤器处理它。但现在,我们可以在输入 期处理不同类型的数据,这全是因为有了 codec 设置。 所以,这里需要纠正之前的一个概念。Logstash 不只是一个input | filter | outpu