Tag: hibernate

Hibernate用ID来查询外键字段

例如,我有两个实体:员工和地址。 在这些实体中,Employee有一个外键AddressID引用Address上的ID列。 在Java域对象中,Hibernate很好地包装了一个Address对象字段的伪造键整数字段。 但是现在,我怎么能用某个AddressID查询Employee呢? 我试图创build一个表别名。 这似乎工作,但它是相当尴尬。 我也试图做这样的事情: criteria.add(restriction.eq("TheAddressObjectFieldName", 123); 它工作一段时间,但并不总是。 我不确定这是否正确,但我一直希望可以。 那么在hibernate中查询外键列的正确方法是什么?

如何指定被通配符包围的JPA命名参数?

我将如何指定一个JPA查询,如: Query q = em.createQuery( "SELECT x FROM org.SomeTable x WHERE x.someString LIKE '%:someSymbol%'" ); 其次是: q.setParameter("someSymbol", "someSubstring"); 而不是触发一个 org.hibernate.QueryParameterException: could not locate named parameter [id] 非常感激!

为什么复合键在hibernate时不鼓励?

这是从Hibernate官方教程 : 有一个替代的<composite-id>声明允许用复合键访问遗留数据。 它的用途是强烈的劝阻别的。 为什么复合键不鼓励? 我正在考虑使用3列表,其中所有的列都是外键,并在我的模型中一起形成一个有意义的关系的主键。 我不明白为什么这是一个不好的主意,我很明显会对他们使用索引。 有什么select? 创build一个额外的自动生成的列,并将其用作主键? 反正我仍然需要查询我的3列! 总之,为什么这个陈述是真实的? 还有什么更好的select?

DAO与ORM(hibernate)模式

我读过一些文章,DAO不是强制性的,它的实现是由“它依赖”,换句话说,我们可以在ORM和DAO模式之间进行select。 好吧,让我们假设我不想使用DAO模式,所以我只使用会话CRUD和由hibernate(my ORM)提供的查询操作。 特别是对于“search”和“查找”查询是不正确的,总是要重写它们,所以合理的考虑把它们放到一个类中。 但是这个类是一个简单的DAO,没有全部实现DAO模式和DAOFactory,只是一个轻量级的DAO实现。 所以,重点是我们需要一个DAO,并且select重DAO实现还是轻量级DAO实现? 我说的是错的? 编辑我有另一个问题是把道相互作用,例如我必须login一个用户,并写入login日志(无用的例子,我知道…) 所以在一个DAO模式中,我有所有通用的dao实现,一个DAOFactory,最后是UserHibernateDAO和LogHibernateDAO。 login操作是一种业务方法 : private void login(String username, String password){ daoFactory.beginTransaction(); UserDAO userDao=daoFactory.HIBERNATE.getUserDao(); LogDAO logDao=daoFactory.HIBERNATE.getLogDao(); if(userDao.checkAccount(username, password){ User user=userDao.findByAccount(username, password); logDao.save(new Log("log-in", user); } daoFactory.commit(); } 这是合理的吗? 我可以用这种方式使用道? 如果我想处理exception,更好的地方是在一个业务逻辑? EDIT2让我们假设使用DAO模式,这样做的主要原因是能够在技术(ORM-> JDBC等)之间切换,它一切正常,但我在哪里可以处理hibernate会话和事务? 我不能把它放进一个DAO,它是anty模式,我不能把它放到一个服务层,因为在一个hipohtetycal开关我不得不删除所有这个交易(因为其他技术可能不会使用它们)。

不成功:在Hibernate / JPA / HSQLDB独立版本中使用alter table XXX drop constraint YYY

我正在尝试使用内存中的HSQL DB运行一些Hibernate / JPA示例。 我得到的错误信息如下: 13:54:21,427 ERROR SchemaExport:425 – HHH000389: Unsuccessful: alter table ReferringItem_map drop constraint FK5D4A98E0361647B8 13:54:21,427 ERROR SchemaExport:426 – user lacks privilege or object not found: PUBLIC.REFERRINGITEM_MAP 13:54:21,427 ERROR SchemaExport:425 – HHH000389: Unsuccessful: alter table ReferringItem_myCollection drop constraint FK75BA3266361647B8 13:54:21,427 ERROR SchemaExport:426 – user lacks privilege or object not found: PUBLIC.REFERRINGITEM_MYCOLLECTION 13:54:21,428 ERROR […]

在执行select和count查询的时候,有没有比Hibernate更高效的分页方式?

通常分页查询看起来像这样。 有没有更好的方法,而不是使两个几乎相等的方法,其中之一执行“select* …”,另一个“计数* …”? public List<Cat> findCats(String name, int offset, int limit) { Query q = session.createQuery("from Cat where name=:name"); q.setString("name", name); if (offset > 0) { q.setFirstResult(offset); } if (limit > 0) { q.setMaxResults(limit); } return q.list(); } public Long countCats(String name) { Query q = session.createQuery("select count(*) from Cat where name=:name"); q.setString("name", name); […]

是否有可能分离Hibernate实体,以便更改对象不会自动保存到数据库?

我有Hibernate实体,我必须转换为JSON,我必须在实体中翻译一些值,但是当我翻译值时,这些值立即保存到数据库,但我不想将这些更改保存到数据库。 有没有解决这个问题的方法?

hibernateGrails应用程序中的第二级caching

第一部分 在Grails应用程序中,我知道您可以通过添加为每个域类启用第二级caching static mapping { cache true } 默认情况下,二级caching仅在调用get()时使用,但也可以通过将cache true添加到查询来用于条件查询和dynamic查找器。 但是,我仍然不确定我了解查询caching的工作方式。 我最好的猜测是: 每个域类都有单独的查询caching,例如一个用于Book,另一个用于Author 在执行诸如Author.findByName('bob', [cache: true])类的查询之前,计算基于域类(Author),查询(findByName)和查询参数('bob “)。 如果在作者查询caching中find该键,则返回caching的结果而不是执行查询 任何时候作者被保存,删除或更新,作者查询caching刷新 这似乎是合理的,直到我们认为返回Book实例的查询可能会join到Author表中。 在这种情况下,当“作者”被保存,删除或更新时,需要刷新“书本”和“作者”查询caching。 这使我怀疑,也许只有一个单一的查询caching,并且只要保存了任何caching的域类,它就会被清除。 第二部分 在Grails文档中提到了这一点 除了可以使用Hibernate的二级caching来caching实例外,还可以caching对象的集合(关联)。 例如: class Author { static hasMany = [books: Book] static mapping = { cache true // Author uses the 2nd level cache books cache: true // associated books use the […]

Hibernate和Scala

我一直在玩Scala,我想知道是否有任何经验使用hibernate和mysql作为scala对象的持久存储? 它是开箱即用还是有很多事情要做?

从Spring MVC发送JSON时dynamic忽略Java对象的字段

我有像这样的模型类,hibernate @Entity @Table(name = "user", catalog = "userdb") @JsonIgnoreProperties(ignoreUnknown = true) public class User implements java.io.Serializable { private Integer userId; private String userName; private String emailId; private String encryptedPwd; private String createdBy; private String updatedBy; @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "UserId", unique = true, nullable = false) public Integer getUserId() { return this.userId; } […]