web-dev-qa-db-fra.com

hibernate - n'a pas pu exécuter l'instruction; SQL [n/a] - enregistrement d'un objet imbriqué

J'essaie de sauvegarder un objet imbriqué en utilisant hibernate et je reçois could not execute statement; SQL [n/a] Exception

CODE

@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 { }

Utilisation de RazorSQL J'ai vu que hibernate définit MapPoint et CommissionFee comme VARBINARY

Ce que je ne comprends pas, c'est que hibernate parvient à le sauvegarder en l'absence de commissionFeeInfo. Il n’ya aucun problème avec la sauvegarde MapPoint

Est-ce que quelqu'un a une idée de ce que je fais mal?

METTRE À JOUR

J'ai découvert que si tous les attributs de CommissionFeeInfo à l'exception de agentFeeInfo sont null, l'objet sera enregistré sans problème. Si l'un des autres attributs est != null, les erreurs se produisent. 

MISE À JOUR 2

J'ai changé le type de tous les attributs de CommissionFeeInfo en String et l'objet sera enregistré sans problème, mais je ne peux pas laisser les attributs sous la forme String.

5
Paul

J'ai résolu le problème en ajoutant un réglage 

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

comme annotation pour le champ commisionFeeInfo dans la classe Listing

4
Paul

Pour moi,

@Column(columnDefinition="text")

résout mon problème.

0
SHIVA