2017-10-31 14 views
0

のPostgresにHibernate主キーの生成問題

org.hibernate.AssertionFailure: null id in 
com.example.helloworld.entities.Employee entry (don't flush the Session 
after an exception occurs) 

私はID値を渡すと、それが正常に動作しますが、私が使用しているが、 @GeneratedValue(strategy = GenerationType.IDENTITY)'id'は自動的に生成されません。どんな助けもありがとう! DBスキーマとエンティティコードの詳細は次のとおりです。

DBエンジン:Postgresの

ORM:

表名従業員


Column Name | Type  | Length | Not Null | Default 
name  | Varchar | 64  | true  | NULL 
id   | int8  | 19  | true  |nextval(Employee_id::regclass) 
company_id | int8  |19   | true  | NULL 

表#Company

休止

私は2つのテーブルを次のようしています

 area  | varchar |64   | true  | NULL

上記の表のための

エンティティのJavaクラス:

@Entity 
@Table(name = "Employee") 
public class Employee { 

    public Employee() {super();} 

    @Id 
    @Column(name = "id", columnDefinition = "serial") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @NotNull 
    private long id; 

    @NotNull 
    @Column(name = "company_id") 
    private long company_id; 

    @NotNull 
    @Column(name = "name") 
    private String name; 

    @ManyToOne 
    private Company company; 

    /** 
    setters and getters 
    **/ 
} 

@Entity 
@Table(name = "Company") 
public class Company { 

    public Company() {super();} 

    @Id 
    @Column(name = "id", columnDefinition = "serial") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @NotNull 
    private long id; 

    @NotNull 
    @Column(name = "area") 
    private String area; 

    @NotNull 
    @Column(name = "cname") 
    private String cname; 

    @OneToMany(cascade=CascadeType.ALL) 
    @JoinColumn(name="company_id") 
    private Set<Employee> employees; 

    /** 
    setters and getters 
    **/ 
} 

答えて

0

私はPostgresのと同じ問題がありました。 SequenceGeneratorあなたidフィールドに追加してみてください:

@Id 
@Column(name = "id", columnDefinition = "serial") 
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ_EMPLOYEE") 
@SequenceGenerator(name="SEQ_EMPLOYEE", sequenceName="SEQ_EMPLOYEE", allocationSize=1) 
@NotNull 
private long id; 

は、データベース内の列の名前でSEQ_EMPLOYEEを交換してください。

+0

エラーに差。同じエラーが発生しました:

 ERROR [2017-10-31 14:47:14,721] org.hibernate.AssertionFailure: HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): org.hibernate.AssertionFailure: null id in com.example.helloworld.entities.Employee entry (don't flush the Session after an exception occurs) 

+0

GeneratedValueも変更するのを忘れました。私は自分の投稿を編集しました。 –

+0

ありがとう、@ウェズリーは働いた!それは10からIDの生成を開始しましたが、なぜ私はそれについて次のようにいくつかの質問があります: 1)一意性に関して問題が生じないでしょうか? 2)いくつかのIDの制限を生成できますか? 3)私の場合、なぜ「アイデンティティ生成」が機能しなかったのですか?これは、外部参照のない1つのテーブルで動作します。 –

0

これは私のために働いていた何ではありません:

@Id 
@Column(name = "id", columnDefinition = "serial") 
@GeneratedValue(strategy = GenerationType.IDENTITY, generator="seq_name_generated_in_db") 
@SequenceGenerator(name="seq_name_generated_in_db", sequenceName="seq_name_generated_in_db", initialValue = 1 , allocationSize=1) 
関連する問題