Hibernate:动态设置表名

时间:2012-06-07 08:31:36

标签: hibernate

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

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

3 个答案:

答案 0 :(得分:1)

如果您使用JPA then,可以@PrePersist

如果使用普通Hibernate,请查看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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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