nhibernate - 使用 NHibernate 查询字符串集合

标签 nhibernate hibernate

我有一个“Item”类,这个类有一个“Tags”集合。

Item
    IList<string> Tags;

我的数据库看起来像这样:

Items
   Id

Tags
   ItemId
   TagName

我正在尝试获取所有带有“x”和“y”标签的项目。我如何使用NHibernate(最好使用标准API)来做到这一点?这可能吗?

谢谢。

编辑: 我可以在不映射 Tag 对象的情况下做到这一点吗?它没有 1 个查询。 类似的东西

  1. var q = 查询,将返回具有标签 x 或标签 y 的对象的所有 ID。

  2. var res = 查询,将返回 (q.Execute()) 中具有 Id 的所有项目

最佳答案

尝试这样的事情:

session.CreateCriteria(typeof(Item))
    .CreateCriteria("Tags", global::NHibernate.SqlCommand.JoinType.InnerJoin)
    .Add(Expression.Eq("TagName", "x"))
    .Add(Expression.Eq("TagName", "y"))
    .List()

编辑: 确保 ItemTag 之间具有双向关联。在 Fluent 中,这看起来像:

public class ItemMap : ClassMap<Item>
{
    public ItemMap()
    {
        ...
        HasMany(x => x.Tags).Inverse();
        ...
    }
}

public class TagMap : ClassMap<Tag>
{
    public TagMap()
    {
        ...
        References<Item>(x => x.Item);
        ...
    }
}

关于nhibernate - 使用 NHibernate 查询字符串集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/654632/

相关文章:

c# - "The given key was not present in the dictionary"nHibernate C#

java - hibernate 和子树异常的意外结束

java - Hibernate SessionFactory 到 Spring

java - 外键列被插入为空

java - 当我使用 ddl-auto=create 时,JPA/hibernate 未生成其中一张表

oracle - Oracle 11g 的 NHibernate TransactionScope 问题

asp.net-mvc - 使用 NHibernate.AspNet.Identity

Nhibernate 查询结束

sql-server - 向 NHibernate 标准添加投影会阻止它执行默认实体选择

java - 在 hibernate/jpa 实体类中定义 save 方法是一个好的约定吗?