我有一个实体应根据表示表名的字符串属性动态持久化到不同的表。 Hibernate的动态模型看起来就像我想要的那样,但是我找不到如何设置表名:)有人能告诉我我缺少什么吗?提前谢谢。
P.S.Another找到的解决方案是http://java.dzone.com/articles/hibernate-dynamic-table-routin。但我不喜欢它,因为它看起来像脏黑客。如果我将多个查询部分命名为要替换的子字符串,该怎么办?
答案 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();