【问题标题】:Hibernate creates only some tablesHibernate 只创建一些表
【发布时间】:2018-05-02 10:58:23
【问题描述】:

当 SessionFactory 创建时,Hibernate hbm2ddl 仅创建 6 个表中的 2 个。

创建的表示例:

@Entity
@Table(name = "AUTHORITIES")
public class Authorities {
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  private int id;


  @Column(name = "AUTHORITY", nullable=false)
  private String authority;

  @ManyToOne
  @JoinColumn(name = "USERNAME", nullable=false)
  private User user;
...getters, setters...

未创建的表示例:

@Entity
@Table(name = "EXERCISES")
public class Exercise {
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  private int id;


  @Column(name = "NAME", nullable=false)
      private String name;


  @Column(name = "DESCRIPTION")
      private String description;
...getters, setters...

休眠属性

hibernate.show_sql=true
hibernate.hbm2ddl.auto=create
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

来自控制台的 SQL:

Hibernate: drop table if exists AUTHORITIES cascade
Hibernate: drop table if exists USERS cascade
Hibernate: create table AUTHORITIES (id  serial not null, AUTHORITY varchar(255) not null, USERNAME varchar(255) not null, primary key (id))
Hibernate: create table USERS (USERNAME varchar(255) not null, ENABLED boolean not null, PASSWORD varchar(255) not null, primary key (USERNAME))
Hibernate: alter table AUTHORITIES add constraint FKl8gm1dxqhdixkdsm1p7er9c21 foreign key (USERNAME) references USERS

数据库是远程 ElephantSQL。

【问题讨论】:

  • 其他表是什么?
  • 无法从您发布的内容中看出。某处必须有其他信息性消息。或者可能缺少我们没有看到的配置。
  • 我发布了一张已创建的表和一张未创建的表。如果需要,我可以将它们全部粘贴。我应该告诉你什么配置?

标签: java spring postgresql hibernate spring-mvc


【解决方案1】:

好的,正如duffymo 指出的那样,配置错误。

  @Bean

public LocalSessionFactoryBean getSessionFactory() { LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();

Properties props = new Properties();

// Setting JDBC properties
props.put(DRIVER, env.getProperty("driver"));
props.put(URL, env.getProperty("jdbcUrl"));
props.put(USER, env.getProperty("username"));
props.put(PASS, env.getProperty("password"));

// Setting Hibernate properties
props.put(SHOW_SQL, env.getProperty("hibernate.show_sql"));
props.put(HBM2DDL_AUTO, env.getProperty("hibernate.hbm2ddl.auto"));
props.put(DIALECT, env.getProperty("hibernate.dialect"));

// Setting C3P0 properties
props.put(C3P0_MIN_SIZE, env.getProperty("hibernate.c3p0.min_size"));
props.put(C3P0_MAX_SIZE, env.getProperty("hibernate.c3p0.max_size"));
props.put(C3P0_ACQUIRE_INCREMENT, env.getProperty("hibernate.c3p0.acquire_increment"));
props.put(C3P0_TIMEOUT, env.getProperty("hibernate.c3p0.timeout"));
props.put(C3P0_MAX_STATEMENTS, env.getProperty("hibernate.c3p0.max_statements"));

factoryBean.setHibernateProperties(props);
factoryBean.setAnnotatedClasses(User.class, Authorities.class, Exercise.class, ExerciseUnit.class, Routine.class, Training.class);

return factoryBean;

我忘记在以下位置设置新实体:

    factoryBean.setAnnotatedClasses(User.class, Authorities.class, Exercise.class, ExerciseUnit.class, Routine.class, Training.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 2019-06-28
    • 1970-01-01
    • 2013-10-16
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多