【问题标题】:Entity with ID type String errorID 类型字符串错误的实体
【发布时间】:2013-03-19 09:24:46
【问题描述】:

当我坚持我得到转储时,我有以下实体, 我移动到字段字符串值(这就是模型定义的 ID 类型字符串的值,例如 (vacation,WORK_ACCIDENT...所以我无法更改它),错误是

INTEGER 类型的字符串格式无效。

@Entity
public class LeaveReType {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private String id;

我有另一个 ID 类型为字符串的实体,当我移动到它的编号时,持久性 工作正常,我可以使用一些 ID 注释来忽略这个限制吗?

Exception in thread "main" javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLDataException: Invalid character string format for type INTEGER.
Error Code: 20000
Call: INSERT INTO LESTTYPE (ID, AVAILABLEBALANCE, ENTITLEMENT, NAME, PENDINGITEMS) VALUES (?, ?, ?, ?, ?)
    bind => [5 parameters bound]
Query: InsertObjectQuery(LESTTYPE [id=WORK_ACCIDENT, name=Work Accident, entitlement=n/a, availableBalance=n/a, pendingItems=0 pending items])

我也试过了,但我得到了同样的错误

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@TypeConverter(dataType = Long.class, name = "id")
private String id;

【问题讨论】:

  • @baraky- 我试图添加注释@Column(columnDefinition="ID1", name = "id") 并且错误是一样的......
  • @baraky- 是的,正如我在附加条款评论中所写的那样,但不确定我应该在那里放什么......
  • @JeanTennie - 这个特定的 id 似乎不应该是自动生成的。为什么不完全去掉@GeneratedValue 注释,然后自己填充列?

标签: java jpa eclipselink derby


【解决方案1】:

如果您的数据库类型是 NUMBER,您是否希望您的对象类型是 String,您应该使用 Converter 来转换类型。

即 @TypeConverter(dataType=Long.class)

但实际上,如果您的数据库类型是 NUMBER,那么您应该在 Java 中使用数字类型。如果您愿意,您仍然可以拥有采用 String 的 get/set 方法。在 String 类型上使用 @GeneratedValue 也很奇怪。

【讨论】:

  • 谢谢詹姆斯,但我试图添加这样的注释,就像你的例子一样,我得到了同样的错误,我在最后编辑了我的帖子,加上我添加的注释......
  • 你还需要@Convert("id") (转换器是像序列一样的命名对象)
猜你喜欢
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
相关资源
最近更新 更多