Когда я делаю JpaRepository.save (Entity e), первичный ключ, сгенерированный с помощью последовательности гибернации, сохраняется как любое случайное значение, обычно начиная с -43 или -42.
Я подпружинен, пружинная загрузкапроект с JPA.
Ниже находится мой файл свойств:
hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
hibernate.hbm2ddl.auto=validate
hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
hibernate.show_sql=false
hibernate.format_sql=true
Это моя сущность, для которой я звоню сохранить.Имя последовательности - CPU_Responses_Seq уже присутствует в БД
@Entity
@Table(name="CPU_Responses")
public class CPUResponses extends BaseEnity{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator="CPUResponseSeq",strategy=GenerationType.SEQUENCE)
@SequenceGenerator(name="CPUResponseSeq",sequenceName="CPU_Responses_Seq")
@Column(name = "Response_ID", nullable=false,updatable=false)
private long responseId;
Это мой класс конфигурации персистентности
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages= {"package path"})
@PropertySource("classpath:application.properties")
public class PersistanceConfiguration {
@Autowired
private Environment env;
public Environment getEnv() {
return env;
}
public void setEnv(Environment env) {
this.env = env;
}
@Bean
LocalContainerEntityManagerFactoryBean entityManagerFactory() throws NamingException {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource());
entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
entityManagerFactoryBean.setPackagesToScan("entity path");
Properties jpaProperties = new Properties();
//Configures the used database dialect. This allows Hibernate to create SQL
//that is optimized for the used database.
jpaProperties.put("hibernate.dialect", env.getRequiredProperty("hibernate.dialect"));
entityManagerFactoryBean.setJpaProperties(jpaProperties);
return entityManagerFactoryBean;
}
@Bean
public DataSource dataSource() throws NamingException {
JndiObjectFactoryBean bean = new JndiObjectFactoryBean();
bean.setJndiName("java:comp/env/jdbc/CPUDB");
bean.setProxyInterface(DataSource.class);
bean.setLookupOnStartup(false);
bean.afterPropertiesSet();
return (DataSource) bean.getObject();
}
@Bean
JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory);
return transactionManager;
}
}
Я не знаю, что происходит неправильно.Данные сохраняются в БД, но с отрицательным первичным ключом.Мой секвенсор в БД имеет минимальное значение как ноль, поэтому секвенсор правильный.
Пожалуйста, помогите