Id generation PostgreSQL hibernate XML C#

本文关键字:XML hibernate PostgreSQL generation Id | 更新日期: 2023-09-27 18:15:47

我无法解决这个问题,我已经尝试了几乎所有的方法,但你可以猜到-没有。

这是我的xml映射文件
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="Test" namespace="Test.Model">
  <class name="Visitor" table="visitors" dynamic-update="true" >
    <cache usage="read-write"/>
    <id name="Id" column="id" type="long" >
      <generator class="sequence" >
        <param name="sequence">visitors_id_seq</param>
      </generator>
    </id>
    <property name="Name" column ="name"/>
    <property name="Age" column ="age"/>
    <property name="Gender" column ="gender"/>
  </class>
</hibernate-mapping>

它工作得很好,但是当我试图插入新的编码器时,它给了我一个错误

无法插入:[Test.Model.][SQL: INSERT INTO visitors .(姓名,年龄,性别,id) VALUES (?), ?, ?, ?)]

My model class是

public class Visitor : HumanEntityBase
{
}
public class HumanEntityBase : EntityBase
{
    public virtual string Name { get; set; }
    public virtual int Age { get; set; }
    public virtual char Gender { get; set; }
}
  public class EntityBase
    {
        public virtual long Id { get; set; }
    }

我尝试过不同类型的类,如原生,身份,但没有帮助。

SQL在

后面
CREATE TABLE visitors ( name text,
                       age integer,
                       gender character varying(1),
                       id bigserial NOT NULL,
                       CONSTRAINT visitors_primary
                       PRIMARY KEY (id) ) WITH (   OIDS=FALSE );
ALTER TABLE visitors   OWNER TO postgres;

序列
-- Sequence: visitors_id_seq
-- DROP SEQUENCE visitors_id_seq;
CREATE SEQUENCE visitors_id_seq
    INCREMENT 1 
    MINVALUE 1 
    MAXVALUE 9223372036854775807
    START 3
    CACHE 1;
ALTER TABLE visitors_id_seq  
OWNER TO postgres;

请帮忙解决这个问题,我不知道还能再试什么

编辑

有没有办法不插入ID ?我认为它会工作,但我不知道如何做到这一点,只检索ID,但不插入生成等。

Id generation PostgreSQL hibernate XML C#

问题解决了。
主要问题是我试图插入空值

INSERT INTO visitors (id, name, age, gender) VALUES (nextval ('visitors_id_seq'), (('фыв22')::text), ((2112)::int4), ((' ')::text)) returning id

这不能从NPgsql工作,但从pgAdmin sql查询工作得很好。
我偶然发现了这个问题,我也不得不修改我的映射文件一点点

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="Test" namespace="Test.Model">
  <class name="Visitor" table="visitors" dynamic-update="true" >
    <cache usage="read-write"/>
    <id name="Id" column="id"  type="long">
      <generator class="identity">
        <param name="sequence">visitors_id_seq</param>
      </generator>
    </id>
    <property name="Name" column ="name"/>
    <property name="Age" column ="age"/>
    <property name="Gender" column ="gender"/>
  </class>
</hibernate-mapping>