2015-08-05 3 views
2

Я пытаюсь сохранить вложенный объект, используя спящий режим, и я получаю could not execute statement; SQL [n/a] Exceptionhibernate - невозможно выполнить оператор; SQL [н/д] - сохранение вложенных объектов

КОД

@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

То, что я не могу понять, это тот факт, что спящий режим сохраняет его при отсутствии комиссии. У него нет проблем с сохранением MapPoint

Есть ли у кого-нибудь идеи о том, что я делаю неправильно?

UPDATE

я узнал, что, если все атрибуты CommissionFeeInfo кроме agentFeeInfo являются null, объект будет сохранен без проблем. Если один из других атрибутов - != null, возникают ошибки.

UPDATE 2

Я изменил тип всех атрибутов CommissionFeeInfo в String и объект будет сохранен без проблем, но я не могу позволить атрибуты String.

+0

Можете ли вы объяснить, больше ошибок у вас есть? Есть какое-либо вложенное исключение? Любой код ошибки SQL? –

+0

@ RicardoVila Да, есть вложенные исключения 'java.sql.SQLDataException: исключение данных: строковые данные, правильное усечение; table: столбец LISTING: COMMISSION_FEE_INFO' – Paul

+0

, а также 'org.springframework.dao.DataIntegrityViolationException: не удалось выполнить оператор; SQL [n/a]; Вложенное исключение - org.hibernate.exception.DataException: невозможно выполнить оператор' и 'sql = n/a' – Paul

ответ

1

Я решил эту проблему, добавив, установив

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

в качестве аннотации для поля commisionFeeInfo в классе Listing

Смежные вопросы