web-dev-qa-db-ja.com

休止状態-ステートメントを実行できませんでした。 SQL [n / a]-ネストされたオブジェクトを保存しています

入れ子になったオブジェクトを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を使用すると、hibernateMapPointCommissionFeeVARBINARYとして定義することがわかりました

私が理解できないことは、commissionFeeInfoが存在しないときにhibernateがなんとかそれを保存するという事実です。 MapPointの保存には問題ありません

誰かが私が間違っていることについてアイデアを持っていますか?

[〜#〜]更新[〜#〜]

CommissionFeeInfo以外のagentFeeInfoのすべての属性がnullであれば、オブジェクトは問題なく保存されることがわかりました。他の属性の1つが!= null、エラーが発生します。

更新2

CommissionFeeInfoのすべての属性のタイプをStringに変更しました。オブジェクトは問題なく保存されますが、属性をStringにすることはできません。

5
Paul

設定を追加して問題を解決しました

@Column(name = "commission_fee_info", columnDefinition = "LONGVARBINARY")

クラスcommisionFeeInfoのフィールドListingの注釈として

5
Paul

私のために、

@Column(columnDefinition="text")

私の問題を解決します。

0
SHIVA