Ich versuche ein verschachteltes Objekt mit dem Ruhezustand zu speichern und erhalte 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 { }
Mit RazorSQL
habe ich gesehen, dass hibernate
MapPoint
und CommissionFee
als VARBINARY
definiert.
Was ich nicht verstehen kann, ist die Tatsache, dass Hibernate es schafft, es zu speichern, wenn commissionFeeInfo nicht vorhanden ist. Es hat kein Problem mit dem Speichern von MapPoint
Hat jemand eine Ahnung, was ich falsch mache?
UPDATE
Ich habe herausgefunden, dass das Objekt ohne Probleme gespeichert wird, wenn alle Attribute von CommissionFeeInfo
mit Ausnahme von agentFeeInfo
null
sind. Wenn eines der anderen Attribute != null
ist, treten die Fehler auf.
UPDATE 2
Ich habe den Typ aller Attribute von CommissionFeeInfo
in String
geändert und das Objekt wird ohne Probleme gespeichert, aber ich kann die Attribute nicht als String
zulassen.
Ich habe das Problem durch Hinzufügen von Einstellungen gelöst
@Column(name = "commission_fee_info", columnDefinition = "LONGVARBINARY")
als Annotation für das Feld commisionFeeInfo
in der Klasse Listing
Für mich,
@Column(columnDefinition="text")
löst mein Problem.