Java hibernate-无法执行语句;SQL[n/a]-保存嵌套对象

Java hibernate-无法执行语句;SQL[n/a]-保存嵌套对象,java,hibernate,exception,save,hsqldb,Java,Hibernate,Exception,Save,Hsqldb,我正在尝试使用hibernate保存嵌套对象,我收到无法执行语句;SQL[n/a]异常 代码 @Entity @Table(name = "listing") @Inheritance(strategy = InheritanceType.JOINED) public class Listing implements Serializable { @Id @Column(name = "listing_id") private String listingId; @Colum

我正在尝试使用hibernate保存嵌套对象,我收到
无法执行语句;SQL[n/a]异常

代码

@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

我不明白的是,hibernate在commissionFeeInfo不存在时设法保存了它。保存
MapPoint

有人知道我做错了什么吗

更新

@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 { }
我发现如果
CommissionFeeInfo
的所有属性(除了
agentFeeInfo
之外)都是
null
,那么对象将被保存,不会出现问题。如果其他属性之一为
!=null
,则会出现错误

更新2


我将
CommissionFeeInfo
的所有属性的类型更改为
String
,对象将毫无问题地保存,但我不能让属性为
String
我通过添加设置解决了问题

@Column(name = "commission_fee_info", columnDefinition = "LONGVARBINARY")
作为类
列表
中字段
commissionfeeinfo
的注释

@Column(columnDefinition="text")

解决了我的问题。

由于另一个原因,该解决方案可能会有所帮助。另一个原因可能是列长度。检查列的长度。我也有同样的错误,原因是我的数据超过了列的大小

setSignInProvider("String length > 15 ") 
以前

    @Column(name = "sing_in_provider", length = 15)
然后

   @Column(name = "sing_in_provider", length = 100)

你能解释一下你的错误吗?是否存在嵌套异常?有SQL错误代码吗?@RicardoVila是的,有一个嵌套的异常
java.SQL.SQLDataException:data exception:string data,右截断;表:列表列:佣金费用信息和org.springframework.dao.DataIntegrityViolationException:无法执行语句;SQL[n/a];嵌套异常为org.hibernate.exception.DataException:无法执行语句
sql=n/a