相关疑难解决方法(0)

如何外化JPAs persistence.xml中的属性?

我想将一些hibernate配置放在属性文件中,以使其在没有构建和部署的情况下可编辑.

我尝试通过遵循Create JPA EntityManager中没有persistence.xml配置文件的指示来解决我的问题

app.properties:

hibernate.show_sql=true 
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=validate 
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.default_schema=myschema
Run Code Online (Sandbox Code Playgroud)

persistence.xml中

<?xml version="1.0" encoding="UTF-8"?>
<!-- Persistence deployment descriptor for dev profile -->
<persistence xmlns="http://java.sun.com/xml/ns/persistence" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
             version="1.0">

   <persistence-unit name="pu">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>jdbc/appDatasource</jta-data-source>
      <properties>
         <property name="jboss.entity.manager.factory.jndi.name" value="java:/appEntityManagerFactory"/>
      </properties>
   </persistence-unit>

</persistence>
Run Code Online (Sandbox Code Playgroud)

在初始化代码中,应用程序执行以下序列(找到属性),

Properties props = new Properties();
InputStream is = ClassLoader.getSystemResourceAsStream( "app.properties" );
props.load( is );
Persistence.createEntityManagerFactory( "pu", props );
Run Code Online (Sandbox Code Playgroud)

但失败并显示错误消息:

 INFO  [SessionFactoryImpl] building session factory
 INFO  [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured
ERROR [STDERR] …
Run Code Online (Sandbox Code Playgroud)

java hibernate seam jpa java-ee

22
推荐指数
1
解决办法
3万
查看次数

Spring Boot EntityManagerFactoryBuilder未自动装配

在Spring Boot应用程序中,我正在尝试设置多个数据库连接.我已经开始构建主数据源,但是我在mySqlEntityManagerFactory方法上遇到以下错误.

无法自动装配.没有EntityManagerFactoryBuilder的bean

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.PersistenceContext;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

@Configuration
@Transactional
@EnableTransactionManagement
@EnableJpaRepositories(
        basePackages = "digital.sheppard.dao",
        entityManagerFactoryRef = "entityManager",
        transactionManagerRef = "transactionManager")
public class PrimaryDBConfig {

    @Bean(name="dataSource")
    @Primary
    @ConfigurationProperties(prefix = "primary.datasource.mysql")
    public DataSource mysqlDataSource() {
        return DataSourceBuilder.create().build();
    }

    @PersistenceContext(unitName = "primary")
    @Primary
    @Bean(name = "entityManager")
    public LocalContainerEntityManagerFactoryBean mySqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(mysqlDataSource()).persistenceUnit("primary").properties(jpaProperties())
                .packages("digital.sheppard.model").build();
    }

    private Map<String, Object> jpaProperties() …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

20
推荐指数
2
解决办法
8977
查看次数

JPA with Hibernate 5:以编程方式创建EntityManagerFactory

这个问题是专门关于编程创建JPA EntityManagerFactory由Hibernate支持5,这意味着无需配置XML文件没有使用Spring.此外,这个问题具体是关于EntityManagerFactory 使用Hibernate Interceptor创建一个.

我知道如何以SessionFactory我想要的方式创建Hibernate ,但我不想要Hibernate SessionFactory,我想要一个EntityManagerFactory由Hibernate支持的JPA SessionFactory.鉴于EntityManagerFactory有一种方法可以获得底层证券SessionFactory,但如果你拥有的是一个SessionFactory并且所有你想要的东西都是EntityManagerFactory它的包装,看起来你运气不好.

Hibernate版本4.2.2 Ejb3Configuration已被弃用,但似乎没有其他方式以编程方式创建EntityManagerFactory,所以我做了这样的事情:

@SuppressWarnings( "deprecation" )
EntityManagerFactory buildEntityManagerFactory(
        UnmodifiableMap<String,String> properties,
        UnmodifiableCollection<Class<?>> annotatedClasses, 
        Interceptor interceptor )
{
    Ejb3Configuration cfg = new Ejb3Configuration();
    for( Binding<String,String> binding : properties )
        cfg.setProperty( binding.key, binding.value );
    for( Class<?> annotatedClass : annotatedClasses )
        cfg.addAnnotatedClass( annotatedClass );
    cfg.setInterceptor( interceptor ); …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa hibernate-entitymanager hibernate-5.x

7
推荐指数
1
解决办法
4096
查看次数

以编程方式创建实体管理器而不持久化文件

我正在尝试以编程方式创建实体工厂管理器而不使用持久性文件

    EntityManagerFactory emf;
    Map<String, String> properties = new HashMap<String, String>();
    properties.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
    properties.put("hibernate.connection.url", "jdbc:mysql://173.194.25***************");
    properties.put("hibernate.connection.username", "etech****");
    properties.put("hibernate.connection.password", "A*****");
    properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
    properties.put("hibernate.show-sql", "true");
    properties.put("provider", "org.hibernate.ejb.HibernatePersistence");
    emf = Persistence.createEntityManagerFactory(idClient, properties);
Run Code Online (Sandbox Code Playgroud)

在线

emf = Persistence.createEntityManagerFactory(idClient, properties);
Run Code Online (Sandbox Code Playgroud)

我收到错误:

org.springframework.beans.factory.BeanCreationException:创建名为'com****RepositoryFieldsFieldWorkerRepositoryImpl'的bean时出错:init方法的调用失败; 嵌套异常是javax.persistence.PersistenceException:没有名为idClient的EntityManager的持久性提供程序

我该如何解决这个问题?

任何帮助将不胜感激

java entity hibernate entitymanager eclipselink

3
推荐指数
2
解决办法
2万
查看次数

持久性提供者密码困境

背景

普通的旧式 Java 应用程序,没有附加 Web 服务器(甚至没有JBoss),正在使用 JPA 来查询数据库。

问题

JDBC 密码暴露在persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:postgresql:DATABASE"/>
      <property name="javax.persistence.jdbc.user" value="USERNAME"/>
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
      <property name="javax.persistence.jdbc.password" value="PASSWORD"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.hbm2ddl.auto" value="validate"/>
    </properties>
  </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

主意

可以实例化JNDI 子上下文以在应用程序的方法中设置密码main。这可能允许使用 JTA 数据源:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">
  <persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <jta-data-source>java:/DefaultDS</jta-data-source>
      <properties>
         <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
      </properties>
   </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

问题

如何将密码外部化,使其不再存在于内部persistence.xml …

java security hibernate jpa jdbc

3
推荐指数
1
解决办法
4819
查看次数