我正在使用weblogic和oracle来编程Web应用程序.
数据源通过JNDI配置,数据库用户可以将DML转换成表,但不能使用DDL.您可能会猜到,该用户不是这些表的所有者,但他被授予访问权限.
数据源通过JNDI配置,数据库用户可以将DML转换成表,但不能使用DDL.您可能会猜到,该用户不是这些表的所有者,但他被授予访问权限.
假设他是GUEST_USER
该应用程序使用JPA EclipseLink,并且已经定义了很多实体.我不想在每个实体类中写入属性来改变模式.
我已经尝试了一个SessionCustomizer,使用这个代码.
public class MyCustomizer implements SessionCustomizer{ @Override public void customize(Session session) throws Exception { session.executeNonSelectingsql("ALTER SESSION SET CURRENT_SCHEMA = OWNERS_SCHEMA"); } }
似乎有一些未初始化的东西,我得到一个空指针异常,我甚至不确定这是在连接使用前更改模式的方式.
任何样品或想法?
在此先感谢您的帮助!
解决方法
如果所有实体使用相同的模式,您可以使用xml映射文件来定义默认模式.
这样的东西应该可以工作(例如,对于JPA 2.0,将schemaLocation更改为1.0)
orm.xml中:
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd" version="2.0"> <persistence-unit-Metadata> <persistence-unit-defaults> <schema>OWNERS_SCHEMA</schema> </persistence-unit-defaults> </persistence-unit-Metadata> . . . </entity-mappings>
persistence.xml中:
<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="foo"> . . . <mapping-file>orm.xml</mapping-file> . . . </persistence-unit> </persistence>