gpt4 book ai didi

java - 如何在没有 xml 的 Dropwizard HibernateBundle 类上设置命名策略?

转载 作者:行者123 更新时间:2023-11-29 04:35:02 25 4
gpt4 key购买 nike

我正在开发一个项目,该项目使用 dropwizard 的 hibernate 包根据以下文档获取 session 工厂:

http://www.dropwizard.io/0.7.1/docs/manual/hibernate.html

该项目不使用任何 xml,仅使用带注释的类来配置 bundle,就像示例中一样。

public class ExampleConfiguration extends Configuration {
@Valid
@NotNull
@JsonProperty("database")
private DataSourceFactory database = new DataSourceFactory();

public DataSourceFactory getDataSourceFactory() {
return database;
}
}

private final HibernateBundle<ExampleConfiguration> hibernate =
new HibernateBundle<ExampleConfiguration>(
some.class
) {
@Override
public DataSourceFactory getDataSourceFactory(ExampleConfiguration configuration) {
return configuration.getDataSourceFactory();
}
};

但是,我们有一个用例,我需要在 DAO 对象的表名前加上环境,以便覆盖 @Table 注释。

根据以下文档,我有一个实现 ImprovedNamingStrategy 的类

http://docs.jboss.org/hibernate/orm/5.0/javadocs/org/hibernate/cfg/ImprovedNamingStrategy.html

但是我如何将命名策略挂接到我的 dropwizard hibernate 包中。我希望能够做这样的事情......

hibernateBundle.setNamingStrategy(ImprovedNamingStrategy.Instance)

hibernateBundle.addAnnotatedClass(someHibernateNamingPropertyConfig)

https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/cfg/Configuration.html#setNamingStrategy(org.hibernate.cfg.NamingStrategy)

但是,hibernateBundle API 不允许这样做。

翻看HibernateBundle的源码

https://github.com/dropwizard/dropwizard/blob/master/dropwizard-hibernate/src/main/java/io/dropwizard/hibernate/HibernateBundle.java

你可以看到它使用了“import io.dropwizard.Configuration;”与确实公开所有这些方法的 org.hibernate.cfg 相反。我试图避免重大重构,因此如果有一种“hacky”方式强制设置 bundle 的命名属性,那么我可以接受。

任何关于从这里去哪里的想法都将不胜感激。

最佳答案

在 Dropwizard 0.8.4 中找到了适合我的解决方案。不确定它是否可以帮助您使用 Dropwizard 0.7.1,但它肯定会对来自 Google 的读者有同样的问题有帮助。

您可以扩展 HibernateBundle 并覆盖 configure()。在构建 SessionFactoryFactory 之前调用此方法,并为其使用 Configuration 对象。然后,您可以覆盖该方法以添加您可能需要的任何特殊配置。

例子:

public abstract class DatabaseWithImprovedNamingStrategyBundle extends ScanningHibernateBundle {
public DatabaseWithImprovedNamingStrategyBundle(String pckg) {
super(pckg);
}

@Override
protected void configure(Configuration configuration) {
super.configure(configuration);
configuration.setNamingStrategy(ImprovedNamingStrategy.INSTANCE);
}
}

此示例使用 ScanningHibernateBundle,因为它是我使用的那个,但您也可以直接使用 HibernateBundle。

关于java - 如何在没有 xml 的 Dropwizard HibernateBundle 类上设置命名策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41992014/

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