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
.
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
Pour moi,
@Column(columnDefinition="text")
résout mon problème.