gpt4 book ai didi

java - OpenJPA & Spring Boot 2 & Gradle

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:26 25 4
gpt4 key购买 nike

我正在尝试使用最新的 Spring Boot 2 和 Gradle 运行 OpenJPA。

问题是 Spring 5 不再支持 OpenJPA。

当我运行应用程序时,我看到一个错误:

Caused by: org.apache.openjpa.persistence.ArgumentException: This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: "
aero.onair.accground.aft.TestEntity".

旧版 Gradle 有一些插件使用 openjpa 库进行实体增强,但它不适用于新版。

我在这个 repo 中使用了适配器和方言: https://github.com/apache/syncope/tree/master/core/persistence-jpa/src/main/java/org/springframework/orm/jpa/vendor

我在 resources/jpa/persistence.xml 中有 persistence.xml 文件我也尝试将它移动到 resources/META-INF/

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
version="2.0">

<persistence-unit name="aftDbUnitName">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<class>aero.onair.accground.aft.TestEntity</class>
</persistence-unit>

</persistence>

我的 OpenJPA 配置:

import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.openjpa.persistence.PersistenceProviderImpl;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter;
import org.springframework.transaction.jta.JtaTransactionManager;

@Configuration
public class OpenJpaConfig extends JpaBaseConfiguration {

protected OpenJpaConfig(DataSource dataSource,
JpaProperties properties,
ObjectProvider<JtaTransactionManager> jtaTransactionManager,
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
super(dataSource, properties, jtaTransactionManager, transactionManagerCustomizers);
}

@Override
protected AbstractJpaVendorAdapter createJpaVendorAdapter() {
OpenJpaVendorAdapter jpaVendorAdapter = new OpenJpaVendorAdapter();
jpaVendorAdapter.setShowSql(true);
return jpaVendorAdapter;
}
@Override
protected Map<String, Object> getVendorProperties() {
return new HashMap<>(0);
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setDataSource(getDataSource());
factory.setPersistenceProviderClass(PersistenceProviderImpl.class);
factory.setJpaVendorAdapter(new OpenJpaVendorAdapter());
factory.setPersistenceXmlLocation("jpa/persistence.xml");
return factory;
}
}

测试实体:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class TestEntity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private String name;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

最后是主应用程序类:

@SpringBootApplication(exclude = {XADataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@Slf4j
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

@Autowired
TestEntitiyRepository testEntitiyRepository;

@PostConstruct
public void test() {
long count = testEntitiyRepository.count();
log.info("Count = {}", count);

TestEntity entitiy = new TestEntity();
entitiy.setName("testtttt");

testEntitiyRepository.save(entitiy);

count = testEntitiyRepository.count();
log.info("Count after save = {}", count);
}
}

最佳答案

对我来说最好的解决方案是从这个页面添加一个插件:

https://github.com/radcortez/openjpa-gradle-plugin

另一种解决方案是在 VM 选项中设置一个 javaagent:-javaagent:/path/openjpa-all-3.1.0.jar

关于java - OpenJPA & Spring Boot 2 & Gradle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56078814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com