如何告诉nHibernate不允许表中的重复条目?

时间:2009-04-03 14:07:23

标签: nhibernate

我有一个简单的实体,它有一个Id(主键)和一个字符串名称。我正在寻找一种方法告诉nHibernate不要在表中允许重复的名称。

我想要一个可以接受新实体(Id = 0)的Add方法,并在必要时添加新实体&更新ID。这现在有效。如果表中已存在该名称,我只想更新Id并返回现有的Id。

我希望能够这样称呼它:

Foo foo = new Foo(名字); // foo.Id = 0 FooRepository.Add(FOO);

..然后foo.Id<> 0,它被添加或找到现有的foo.name并返回其ID。

感谢/ JF

2 个答案:

答案 0 :(得分:2)

您必须在映射文件中将unique属性设置为true才能使其成为唯一列。

<property name="serialNumber" unique="true" type="string" column="SERIAL_NUMBER"/>

如果您希望该列成为该表的主键,则输入

<id name="CommentId">
    <column name="comment_id" not-null="false"/>
    <generator class="identity"/>
</id>

该列将自动具有唯一约束。

答案 1 :(得分:0)

我不认为nhibernate可以在自然键上另外匹配。您必须在存储库中的add方法中执行此操作。   即按名称查找,如果找到则更新名称并保存。(通过示例查找可能会在此处保存一段时间)

看起来你想在这里使用指定的id而不是代理id。 可以将地图名称作为标识符并删除代理键