2015-05-16 153 views
3

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

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

org.hibernate.cfg.environment hibernate.properties not found

但我需要它呢?因为我已经完成了所有配置和映射。

这里是我的应用程序类:

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 

Configurtion类:

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; 
    } 
} 

我已经参加过很多教程,但他们都没有真正解释如何配置休眠。先谢谢你。

回答

1

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

我的问题是一个Book类,IDE自动在LibraryApplication类中导入了名为Book的java库,所以数据库没有映射它。

在另一方面,在图书类的命名查询应如下:

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

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