내 프로젝트에서는 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 작업은 두 가지 모두에서 작동합니다. 왜 최대 절전 모드가 두 개의 다른 테이블에 대해 ID 카운터를 공유하는지 이해하지 못합니다.
좋아, 그래서 문제의 원인을 찾았습니다.
사용
@GeneratedValue(strategy = GenerationType.AUTO)
최대 절전 모드는 데이터베이스에 정의 된 기본 전략을 사용하며 대부분의 경우 IDENTITY이지만 제 경우에는 생성 유형을 자동으로 설정하는 것이 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에서 변경 한 것이 내가 사용하는 것입니다. 최대 절전 모드 버전은 5.2.6입니다.
이것이 다른 사람에게도 도움이되기를 바랍니다.
건배
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다