在我的项目中,我没有使用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计数器
答案 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。
希望这也可以帮助其他人。
干杯