通过 JNDI 参考为 Hibernate 设置默认模式

Set a default schema for Hibernate via JNDI reference

我使用 Spring 4、Hibernate 4 和 WebSphere 8.5.7。有这样一个class:

@Entity
@Table(name = "APPLICATION", schema = "NEW_SCHEMA")
public class Application {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQUENCE_NEW")
    @SequenceGenerator(name = "SEQUENCE_NEW", schema = "NEW_SCHEMA", sequenceName = "SEQUENCE_NEW", allocationSize = 1, initialValue = 1)
    @Column(name = "ID")
    @Getter @Setter private Long id;

我希望能够通过 JNDI 名称更改@Table 签名中的模式。我希望得到这样的东西:

@Table(name = "APPLICATION", schema = "${schema.jndi}")

假设 ${schema.jndi} 将由 Websphere 提供。

换句话说,在业务上下文中,任务如下所示。我需要在整个项目代码(Java、xml、props)中排除对模式的任何提及。并且可以直接从 WebShpere 更改模式。

实施解决方案最简单的方法是什么?

任何建议将不胜感激。

如果您想为整个应用程序(每个实体)配置模式,您可以在 Hibernate 配置文件中执行此操作(通常 WAS 将引用此配置文件)

<property name="hibernate.default_schema">myschema</property>

IBM WebSphere Application Server 提供了数据源配置,可让您设置默认模式。 通过左侧菜单栏检查以下内容:

Resources -> Data sources -> YOUR DataSource -> Additional Properties -> Custom Properties

找到 'currentSchema' 属性 并将其值更改为所需的架构。请记住保存新配置并测试连接以确保在集群环境下节点同步。 此外,它可能需要重新启动您的应用程序服务器才能看到新的更改。

在这种情况下,无需在整个项目代码中提及架构名称。