使用nHibernate(或Hibernate作为映射没有区别),我想用以下SQL创建一个对象:
CREATE TABLE `table` (
`EntityId` binary(16) NOT NULL,
`Number` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`EntityId`),
Key(`Number`)
);
我尝试使用生成的属性,附加的id标记,在属性标记下的列标记中指定sqltype,并且使用默认值,插入,更新和非null属性,但似乎没有任何效果。我只是无法在Hibernate映射语法中映射这个?如何获得不是自动递增主键的属性?
我会发布我得到的映射,但没有一个能够正常工作。
提前致谢
更新 使用这种映射,我认为这是一个很好的起点,但不是我想要的:
<class name="TheEntity" table="table">
<id name="Id"
column="EntityId"
generator="guid.comb" />
<property name="Number"
generated="insert"
insert="false" update="false" />
</class>
数据库中的模式是这样生成的:
CREATE TABLE `table` (
`EntityId` binary(16) NOT NULL,
`Number` int(11) DEFAULT NULL,
PRIMARY KEY (`EntityId`)
);
这不是理想的行为。 nHibernate也不会通过某种方式将序列插入Number中。生成的属性,如上所示,从我所阅读的内容依赖于数据库,完全通过触发器之类的东西来完成插入和更新。我不想使用触发器来执行像auto_increment这样的基本操作,但是因为已经有内置功能。</ p>
有什么想法吗?
提前再次感谢。
答案 0 :(得分:1)
我使用这样的符号来为postgres生成id:
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "financialAnalyst_seq_gen")
@SequenceGenerator(name = "financialAnalyst_seq_gen", sequenceName = "financialAnalyst_id_seq", allocationSize=1)
答案 1 :(得分:0)
不确定问题出在哪里,但映射可能是这样的:
<class name="TheEntity" table="table">
<id name="Id"
column="EntityId"
generator="guid.comb" />
<property name="Number"
generated="insert"
insert="false" update="false" />
</class>
号码:
生成的值(不代表 id )可以标记为5.5. Generated Properties。引用:
generated="insert"
- 声明在插入时生成给定的属性值,但在后续更新时不会重新生成。
我们也在帮助NHibernate明确声明不插入和升级。
Guid - EntityId:
我没有使用MySQL,所以不确定guid映射是否还存在一些问题 - 检查
Using Guid as Id column in NHibernate causes format exception when using MySQL
但总的来说,当NHibernate为我们使用生成器时,可能就是这样,创建新的EntityId值。如果应用程序创建EntityId不同的值,请使用generator="assigned"
C#中的实体类应该如下所示:
public class TheEntity
{
public virtual Guid Id { get; set; }
public virtual int Number { get; set; }