Java hibernate-无法执行语句;SQL[n/a]-保存嵌套对象
我正在尝试使用hibernate保存嵌套对象,我收到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
无法执行语句;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