入れ子になったオブジェクトをhibernateを使用して保存しようとしていますが、could not execute statement; SQL [n/a] Exception
[〜#〜]コード[〜#〜]
@Entity
@Table(name = "listing")
@Inheritance(strategy = InheritanceType.JOINED)
public class Listing implements Serializable {
@Id
@Column(name = "listing_id")
private String listingId;
@Column(name = "property_type")
private PropertyType propertyType;
@Column(name = "category")
private Category category;
@Column(name = "price_currency")
private String priceCurrency;
@Column(name = "price_value")
private Double priceValue;
@Column(name = "map_point")
private MapPoint mapPoint;
@Column(name = "commission_fee_info")
private CommissionFeeInfo commissionFeeInfo;
}
public class MapPoint implements Serializable {
private final float latitude;
private final float longitude;
}
public class CommissionFeeInfo implements Serializable {
private String agentFeeInfo;
private CommissionFeeType commissionFeeType;
private Double value;
private Double commissionFee;
}
public enum CommissionFeeType implements Serializable { }
RazorSQL
を使用すると、hibernate
がMapPoint
とCommissionFee
をVARBINARY
として定義することがわかりました
私が理解できないことは、commissionFeeInfoが存在しないときにhibernateがなんとかそれを保存するという事実です。 MapPoint
の保存には問題ありません
誰かが私が間違っていることについてアイデアを持っていますか?
[〜#〜]更新[〜#〜]
CommissionFeeInfo
以外のagentFeeInfo
のすべての属性がnull
であれば、オブジェクトは問題なく保存されることがわかりました。他の属性の1つが!= null
、エラーが発生します。
更新2
CommissionFeeInfo
のすべての属性のタイプをString
に変更しました。オブジェクトは問題なく保存されますが、属性をString
にすることはできません。
設定を追加して問題を解決しました
@Column(name = "commission_fee_info", columnDefinition = "LONGVARBINARY")
クラスcommisionFeeInfo
のフィールドListing
の注釈として
私のために、
@Column(columnDefinition="text")
私の問題を解決します。