Hibernate:动态设置表名

Hibernate:动态设置表名,hibernate,Hibernate,我有一个实体,它应该根据表示表名的字符串属性动态地持久化到不同的表中。Hibernate的动态模型看起来正是我想要的,但我找不到如何设置表名:)有人能告诉我缺少什么吗?谢谢,这是事先准备好的 另一个解决办法是。但我不喜欢它,因为它看起来像肮脏的黑客。如果我将多个查询部分命名为要替换的子字符串,该怎么办。如果您使用的是JPA,那么您可以@PrePersist 如果使用普通Hibernate,请查看 我不知道这对你是否有用 看起来你需要的是NamingStrategy教程 @Override pub

我有一个实体,它应该根据表示表名的字符串属性动态地持久化到不同的表中。Hibernate的动态模型看起来正是我想要的,但我找不到如何设置表名:)有人能告诉我缺少什么吗?谢谢,这是事先准备好的


另一个解决办法是。但我不喜欢它,因为它看起来像肮脏的黑客。如果我将多个查询部分命名为要替换的子字符串,该怎么办。

如果您使用的是
JPA,那么
您可以
@PrePersist

如果使用普通
Hibernate
,请查看

我不知道这对你是否有用

看起来你需要的是
NamingStrategy
教程

@Override
public String classToTableName(String className) {
    // your code super.classToTableName()
}


org.hibernate.cfg.NamingStrategy interface.
Hibernate 3.6有四种此接口的实现:

org.hibernate.cfg.DefaultComponentSafeNamingStrategy
org.hibernate.cfg.DefaultNamingStrategy
org.hibernate.cfg.EJB3NamingStrategy
org.hibernate.cfg.ImprovedNamingStrategy

实现您的代码以返回表名。

这更像是一个架构设计问题,那些具有类似定义且只有名称的表由于某些属性而不同,为什么不将此属性添加到表架构中并将所有这些表合并为一个呢?然后您只需将此字段添加到where子句中。

我尝试了很多方法,但都是最简单的:

Session session = super.getSession();
    SQLQuery query = session.createSQLQuery("raw sql");
    query.setParameter(":abc", "value");
    query.addEntity(Some.class);
    return query.list();

整个实体必须转到另一个表,或者只是一个子集?有一个POJO。例如,班上的人。我想保存并从多个表中检索这个类的实例。例如,从坏的人的桌子,好的人的桌子。表具有相同的结构。有上百个这样的表是在运行时动态创建的。根据我们的DB设计和性能预测,这是最好的方法。不要强迫我换另一个(谢谢!不,我使用Hibernate的XML映射文件。嗯,我也发现了这种方法。问题是,如果类名始终相同,如何使用类名确定表名。可能的解决方案是在持久化到DB之前将表名保存到其他位置,然后再检索它。但是我需要同时保存/检索实体,我不想使用同步降低性能。有什么想法吗?谢谢尝试该解决方案不适用于我,因为NamingStrategy实现仅在Hibernate初始化期间调用。目前我正在使用我的主要帖子中提到的dirtyhack解决方案,但实际上我不喜欢它,并且还在寻找另一个解决方案。这并不能回答这个问题。要评论或要求作者澄清,请在他们的帖子下方留下评论——你可以随时对自己的帖子发表评论,一旦你有足够的评论,你就可以发表评论了。