2

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

PS另一个找到的解决方案是http://java.dzone.com/articles/hibernate-dynamic-table-routin。但我不喜欢它,因为它看起来像肮脏的黑客。如果我将多个查询部分命名为要替换的子字符串怎么办。

4

3 回答 3

1

如果你正在使用JPA then你可以@PrePersist

如果使用 plainHibernate然后看看event

不知道它是否适合你。

看起来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

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

于 2012-06-07T08:43:05.390 回答
0

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

于 2014-11-20T16:43:26.557 回答
0

我尝试了很多方法,只有它是最简单的:

Session session = super.getSession();
    SQLQuery query = session.createSQLQuery("raw sql");
    query.setParameter(":abc", "value");
    query.addEntity(Some.class);
    return query.list();
于 2017-04-17T08:02:37.113 回答