HibernateUtil与带注释的类有关

时间:2017-02-25 18:19:12

标签: java hibernate

在我的项目中,我没有使用hibernate.cfg.xml,而是使用

我配置的HibernateUtil类:

public class HibernateUtil {
private static SessionFactory sessionFactory  ;
static {
    Configuration configuration = new Configuration();

    configuration.addAnnotatedClass (Model.User.class);
    configuration.addAnnotatedClass (Model.CarInfo.class);
    configuration.setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver");
    configuration.setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/test");
    configuration.setProperty("hibernate.connection.username", "root");
    configuration.setProperty("hibernate.connection.password", "");
    configuration.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
    configuration.setProperty("hibernate.hbm2ddl.auto", "update");
    configuration.setProperty("hibernate.show_sql", "true");
    configuration.setProperty(" hibernate.connection.pool_size", "50");

    StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());

    sessionFactory = configuration.buildSessionFactory(builder.build());

}
public static SessionFactory getSessionFactory() {
    return sessionFactory;
}
}

所有的crud操作都有效,但是由于某种原因,这两个不同的表共享同一个id计数器,这是一个很大的问题,即: 我添加用户和用户获得1的ID没有问题!

然后我尝试添加car_info,car_id应该是1,但是它的2,如果我回去添加新用户,他的id为3。 我不明白上帝的爱为什么会这样。

我认为我的HibernatUtil类正在解决这个问题,但我不确定原因。 这是具有原始字段的汽车类

 @Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="car_id")
private int car_id;

这是其他具有属性字段的类

@Entity
@Table(name = "user")
@Access(AccessType.PROPERTY)
public class User

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
public int getId() {
    return id.get();
}

再次CRUD操作同时工作,我只是不明白为什么hibernate共享两个不同表的id计数器

1 个答案:

答案 0 :(得分:1)

好的,所以我发现了导致问题的原因:

使用

@GeneratedValue(strategy = GenerationType.AUTO)

意味着hibernate将使用数据库中定义的默认策略,大部分时间都是IDENTITY,但在我的情况下,将生成类型设置为auto是选择SEQUENCE生成类型。

所以我有两个可能的解决方案,使用

@GeneratedValue(strategy = GenerationType.IDENTITY)

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="pk_gen")
@SequenceGenerator(name="pk_gen", sequenceName="p_seq", allocationSize=1)

现在我不知道是什么原因导致的,也许mysql在新版本中改变了一些东西5.7.17是我使用的。 和hibernate的版本是5.2.6。

希望这也可以帮助其他人。

干杯