休眠 \- 无法执行语句; SQL \[不适用\] - 保存嵌套对象

新手上路,请多包涵

我正在尝试使用休眠保存嵌套对象,我收到 could not execute statement; SQL [n/a] Exception

代码

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

Using RazorSQL I saw that hibernate defines MapPoint and CommissionFee as VARBINARY

我无法理解的是,当 commissionFeeInfo 不存在时,hibernate 设法保存了它。保存没问题 MapPoint

有谁知道我做错了什么?

更新

我发现如果 CommissionFeeInfo 的所有属性除了 agentFeeInfonull ,对象将被毫无问题地保存。如果其他属性之一是 != null ,则会发生错误。

更新 2

我将 CommissionFeeInfo 的所有属性的类型更改为 String 并且对象将毫无问题地保存,但我不能让属性为 String

原文由 Paul 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 514
2 个回答

我通过添加设置解决了问题

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

作为类中字段 commisionFeeInfo 的注释 Listing

原文由 Paul 发布,翻译遵循 CC BY-SA 3.0 许可协议

为了我,

 @Column(columnDefinition="text")

解决了我的问题。

原文由 SHIVA 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题