2

MySQLテーブルをマッピングする次のクラスがあります。

@Entity
@Table(name = "category")
public class Category {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private long id;

    @Column(name = "parent_id")
    private long parentId;

列の値がNULLの列を処理すると、次のエラーが発生しparent_idます。

INFO: HHH000327: Error performing load command : org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of com.blogspot.symfonyworld.wealthylaughingduck.model.Category.parentId

これは単なるJavaエラーです。longタイプ(private long parentId)にNULLを割り当てることはできません。この問題を克服するためのヒントを見つけることができず、に置き換えることしか考えられませlongLong。それは良い考えですか、それともこの特定のことを行うための組み込みの休止状態アノテーションまたは何らかのメカニズムがありますか?

4

2 に答える 2

6

クラス属性をプリミティブ(long)として定義しましたが、データベーステーブルに対応する列のnull値が含まれています。マッピングがあいまいなため、プロバイダー(Hibernate)はnullをプリミティブにマッピングしません。

データにnullが含まれている可能性がある場合は、同等のラッパークラス(この場合はLong)を使用する必要があります。

@Entity
@Table(name = "category")
public class Category {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private long id;

    @Column(name = "parent_id")
    private Long parentId;
}
于 2013-03-24T20:42:46.263 に答える
1

parentIdがnull許容であり、それをフィールドとしてマップする必要がある場合は、ラッパークラスを使用する必要があります。

しかし、(ファイル名から推測されるように)外部キーをフィールドとして明示的にマッピングしている場合は、関連付けのマッピングにおけるORMの真の強みの一部を見逃している可能性があります。

于 2013-03-24T20:57:52.377 に答える