Java 如何在orm.xml中使用SpEL?

Java 如何在orm.xml中使用SpEL?,java,spring,jpa,eclipselink,Java,Spring,Jpa,Eclipselink,我需要在我的Spring应用程序中使用orm.xml文件,我正在通过以下操作创建一个bean: @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean(); bean.setPacka

我需要在我的Spring应用程序中使用orm.xml文件,我正在通过以下操作创建一个bean:

@Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean bean = new LocalContainerEntityManagerFactoryBean();
        bean.setPackagesToScan("org.mitre");
        bean.setPersistenceProviderClass(PersistenceProvider.class);
        bean.setDataSource(hikariDataSource);
        bean.setJpaVendorAdapter(jpaAdapter);

        Map<String, String> jpaProperties = new HashMap<>();
        jpaProperties.put("eclipselink.weaving", "false");
        jpaProperties.put("eclipselink.logging.level", "INFO");
        jpaProperties.put("eclipselink.logging.level.sql", "INFO");
        jpaProperties.put("eclipselink.cache.shared.default", "false");

        bean.setJpaPropertyMap(jpaProperties);
        bean.setPersistenceUnitName("defaultPersistenceUnit");

        switch (databaseType){
            case oracle: bean.setMappingResources("db/oracle/entity-mappings_oracle.xml"); break;
            case mssql: bean.setMappingResources("db/mssql/entity-mappings_mssql.xml"); break;
        }

        return bean;
    }
<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_0.xsd"
                 version="2.1">

    <persistence-unit-metadata>
        <persistence-unit-defaults>
            <schema>${some.schema.name}</schema>
        </persistence-unit-defaults>
    </persistence-unit-metadata>

</entity-mappings>
但是,这不起作用,因为映射资源需要ByteArrayResource无法提供的路径

是否有某种方法可以在Java配置中复制orm.xml,并在其中注入属性?我愿意接受关于其他方法的建议


谢谢

如果您想以编程方式更改架构,可以使用SessionCustomizer进行更改,并将其添加到您的jpa属性
JPAPProperties.put(PersistenceUnitProperties.SESSION\u CUSTOMIZER,您的SessionCustomizer);
在您的SessionCustomizer中,您可以在customize方法中更改架构

session.getLogin().setTableQualifier("your_schema")

如果您想以编程方式更改架构,可以使用SessionCustomizer,并将其添加到您的jpa属性
jpaProperties.put(PersistenceUnitProperties.SESSION\u CUSTOMIZER,您的SessionCustomizer);
在您的SessionCustomizer中,您可以在customize方法中更改架构

session.getLogin().setTableQualifier("your_schema")

不能在
orm.xml
中使用SpEL,因为没有Spring,只有JPA和JPA不允许这样做。Hibernate有一个属性,可用于设置默认架构。EclipseLink可能也有类似的功能,您不能在
orm.xml
中使用SpEL,因为没有Spring,只有JPA和JPA不允许您这样做。Hibernate有一个属性,可用于设置默认架构。日食可能有类似的完美,这是工作!对于我的JPAPProperties,我必须执行以下操作:jpapProperties.put(PersistenceUnitProperties.SESSION_CUSTOMIZER,SchemaSessionCustomizer.class.getCanonicalName());值得注意的是,属性所采用的字符串是类的完整规范路径。要将可配置属性放入对象中,您可以将其放入JPAPProperties中,然后从另一端的会话中检索它。太好了,可以了!对于我的JPAPProperties,我必须执行以下操作:jpapProperties.put(PersistenceUnitProperties.SESSION_CUSTOMIZER,SchemaSessionCustomizer.class.getCanonicalName());值得注意的是,属性所采用的字符串是类的完整规范路径。要在对象中获得可配置属性,可以将其放入JPAPProperties中,然后从另一端的会话中检索它。