Bra*_*y D 16 jpa spring-data-jpa
我们刚刚升级到 Spring 3.0.1,并将 javax.peristence-api 替换为 jakarta.persistence-api。
删除:
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>${javax.persistence.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
添加:
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>${jakarta.persistence.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
问题是:雅加达有替代品吗?
javax.sql.DataSource
javax.persistence.EntityManagerFactory
没有发现 jakarta.persistence-api 有替代品
错误来自于这个类。可能是遗留的,是管理 JPA、事务、数据源等的旧方法……我们是否能够摆脱它或更新它?希望能找到一些有用的建议
package com.orders.persistence.jpa;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.HibernateExceptionTranslator;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.Database;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.util.Properties;
@Configuration
@EnableJpaRepositories(
basePackages = "com.orders.persistence.jpa.repository",
entityManagerFactoryRef = "entityManager",
transactionManagerRef = "transactionManager")
@EnableTransactionManagement
public class PersistenceJPAConfig {
@Value( "${driverClassName}" )
private String driverClassName;
@Value( "${url}" )
private String url;
@Value("${username}")
private String jdbcUsername;
@Value("${password}")
private String jdbcPassword;
@Value( "${hibernateDialect}" )
private String hibernateDialect;
@Value( "${hibernateShowSql}" )
boolean hibernateShowSql;
@Value( "${hibernateHbm2ddlAuto}" )
private String hibernateHbm2ddlAuto;
@Value( "${jpaGenerateDdl}" )
boolean jpaGenerateDdl;
@Value("${useQueryCache}")
boolean useQueryCache;
public PersistenceJPAConfig(){
super();
}
@Bean
public HibernateExceptionTranslator hibernateExceptionTranslator(){
return new HibernateExceptionTranslator();
}
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean entityManager(){
final LocalContainerEntityManagerFactoryBean entityManager = new LocalContainerEntityManagerFactoryBean();
entityManager.setDataSource( dataSource() );
entityManager.setPackagesToScan(new String[] {
"com.orders.persistence.jpa",
"com.orders.persistence.model",
"com.orders.persistence.service",
});
final JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(){
{
setDatabase( Database.MYSQL );
setDatabasePlatform( hibernateDialect );
setShowSql( hibernateShowSql );
setGenerateDdl( jpaGenerateDdl );
}
};
entityManager.setJpaVendorAdapter( vendorAdapter );
entityManager.setJpaProperties( additionalProperties() );
return entityManager;
}
@Bean
@Primary
public DataSource dataSource(){
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName( driverClassName );
dataSource.setUrl( url );
dataSource.setUsername( jdbcUsername );
dataSource.setPassword( jdbcPassword );
return dataSource;
}
@Bean
@Primary
public JpaTransactionManager transactionManager(){
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory( entityManager().getObject() );
return transactionManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor(){
return new PersistenceExceptionTranslationPostProcessor();
}
final Properties additionalProperties(){
return new Properties(){
{// use this to inject additional properties in the EntityManager
setProperty("useSecondLevelCache", "org.hibernate.cache.RegionFactory");
setProperty("useQueryCache", "org.hibernate.cache.RegionFactory");
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
小智 17
我一直坚持这一点,但一些 javax 导入没有改变,比如 javax.sql.dataSource。
这些不受 Jakarta EE 命名空间迁移的影响,但保持原样。一些例子是:
javax.sql.* javax.transaction.xa.* javax.xml.* javax.naming.* javax.swing.*
https://www.agilejava.eu/2021/01/22/migration-guide/
| 归档时间: |
|
| 查看次数: |
14545 次 |
| 最近记录: |