我正在将JPA 2.0与Hibernate
4.1.0.Final一起使用。我有几个类,Groups和GroupMembers。每个GroupMember都绑定到一个用户对象
@Entity
@Table(name = "group")
public class Group
{
@Id
@NotNull
@GeneratedValue(generator = "uuid-strategy")
@Column(name = "ID")
private String id;
…
@OneToMany(mappedBy = "group")
private Set<GroupMember> members;
@Entity
@Table(name = "sb_msg_group_member")
public class GroupMember
{
…
@ManyToOne
@JoinColumn(name = "USER_ID", nullable = false, updatable = true)
private User user;
是否有可能编写给定User对象的java.util.Set的JPA标准查询,该查询将返回其成员与该Set完全匹配的组?我尝试了以下…
final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
CriteriaQuery<Group> criteria = builder.createQuery(Group.class);
final Root<Group> groupRoot = criteria.from(Group.class);
final Set<GroupMember> groupMembers = new HashSet<GroupMember>();
for (final User user : users)
{
final GroupMember groupMember = new GroupMember();
groupMember.setUser(user);
groupMembers.add(groupMember);
} // for
criteria.where(builder.equal(groupRoot.get(Group_.members), groupMembers));
final TypedQuery<Group> results = m_entityManager.createQuery(criteria);
但是它失败了,但…
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2611)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2586)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2510)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2259)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:56)
at org.hibernate.loader.Loader.getResultSet(Loader.java:2040)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1837)
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1816)
at org.hibernate.loader.Loader.doQuery(Loader.java:900)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342)
at org.hibernate.loader.Loader.doList(Loader.java:2526)
at org.hibernate.loader.Loader.doList(Loader.java:2512)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2342)
at org.hibernate.loader.Loader.list(Loader.java:2337)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:495)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:357)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1275)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:287)
at org.hibernate.ejb.criteria.CriteriaQueryCompiler$3.getSingleResult(CriteriaQueryCompiler.java:258)
at org.mainco.subco.messaging.repo.MessageDaoImpl.findGroupByMembers(MessageDaoImpl.java:144)
at org.mainco.subco.messaging.repo.MessageDaoIT.testFindGroupByMembers(MessageDaoIT.java:83)
每个用户都将需要不同的根,因为每个根都与其他用户不同(未经测试):
final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
CriteriaQuery<Group> criteria = builder.createQuery(Group.class);
final List<Predicate> predicates = new ArrayList<Predicate>();
final Root<Group> group = criteria.from(Group.class);
for (final User user : users)
{
final Root<GroupMember> memberRoot = group.join(Group_.members);
final Predicate p = builder.equal(memberRoot.get(GroupMember_.user), user);
predicates.add(p);
} // for
predicates.add(builder.equals(builder.count(group.get(Group_.members)),users.size()))
criteria.where(builder.and(predicates.toArray(new Predicate[predicates.size()])));
final TypedQuery<Group> results = m_entityManager.createQuery(criteria);
问题内容: 我想知道如何查询字段以完全匹配字符串。 我实际上正在尝试这样查询: 会返回以开头的所有字符串。 问题答案: 我遇到了类似的问题,而ifound修复了“ .raw”-在您的示例中,请尝试
问题内容: 这是一个分为两个部分的问题。 我的文档如下所示: 我的第一个问题是如何检索“ title” 恰好是 “ No Title”的所有文档。我不希望出现标题为“此文档没有标题”的文档。 我的第二个问题是如何检索“ URL” 恰好 出现在一长串URL中的所有文档。 我正在使用pyelasticsearch,但是在curl中使用通用答案也可以。 问题答案: 如果您存储了源代码(这是默认设置),则
问题内容: 假设我有一个s的列表: 我想返回满足一定条件的元素的列表,例如: 在for中 返回元素的子元素的Python方法是什么? 天真的方法: 有没有一种简单的方法可以执行此操作,也许具有列表理解或函数,而没有临时的? 问题答案: 使用清单理解, 或者您可以使用也, 您实际上可以使用Python的真实语义编写相同的条件,例如 另外,您也可以使用功能与你的,像这样的
问题内容: 我想“左连接”一个表,以便将值不仅连接到匹配的行,而且还连接到任何后续的不匹配的行,直到下一个匹配的行。换句话说,我想用先前的非空值填充空值。 样本数据和所需结果: 表: 表: 结果: 所需结果: 问题答案: 指标 在和上创建索引-如果这些是您的主键,则可能已经有了。 多列索引也可能有所帮助,尤其是在pg 9.2+中仅索引扫描的情况下: 但是,在我的测试中,最初没有使用此索引。必须添加
问题内容: 我有一个用于Elasticsearch的简单JSON查询,如下所示: 仅当值(在这种情况下为“ a1”)不为空时,才如何执行第二个“必须”条件? 问题答案: 您可以使用以下方法实现它-
问题内容: 我正在使用Elasticsearch,但有一段时间魔鬼般地要进行精确匹配。我已经尝试过match,query_string等的各种组合,但是我什么也没得到,或者得到了不好的结果。查询看起来像这样: 排序结果 我当然知道“狗”,“那只狗”和“狗”的得分相同,但是我需要弄清楚如何提高得分“狗”的精确匹配度。 我也试过 但这仍然给我 问题答案: 默认情况下,使用标准分析仪分析字段。如果您想检