我有一个实体,它应该根据一些表示表名的字符串属性动态地持久化到不同的表中。Hibernate 的动态模型看起来正是我想要的,但我找不到如何设置表名:) 谁能告诉我我缺少什么?提前致谢。
PS另一个找到的解决方案是http://java.dzone.com/articles/hibernate-dynamic-table-routin。但我不喜欢它,因为它看起来像肮脏的黑客。如果我将多个查询部分命名为要替换的子字符串怎么办。
我有一个实体,它应该根据一些表示表名的字符串属性动态地持久化到不同的表中。Hibernate 的动态模型看起来正是我想要的,但我找不到如何设置表名:) 谁能告诉我我缺少什么?提前致谢。
PS另一个找到的解决方案是http://java.dzone.com/articles/hibernate-dynamic-table-routin。但我不喜欢它,因为它看起来像肮脏的黑客。如果我将多个查询部分命名为要替换的子字符串怎么办。
如果你正在使用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
实现您的代码以返回表名。
这更像是一个架构设计问题,那些具有相似定义且仅名称因某些属性而不同的表,为什么不将此属性添加到表架构中并将所有这些表合并为一个呢?然后,您只需将此字段添加到 where 子句中。
我尝试了很多方法,只有它是最简单的:
Session session = super.getSession();
SQLQuery query = session.createSQLQuery("raw sql");
query.setParameter(":abc", "value");
query.addEntity(Some.class);
return query.list();