Объект с идентификатором типа String error

У меня есть следующая сущность, когда я сохраняю, я получаю дамп, я перехожу к значению строки поля (это то, как модель определила там строку типа идентификатора со значением, таким как (отпуск,WORK_ACCIDENT... так что я не могу изменить это) и ошибка

Недопустимый формат строки символов для типа INTEGER.

@Entity
public class LeaveReType {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    private String 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;

1 ответ

Если у вас тип базы данных NUMBER, если вы хотите, чтобы тип вашего объекта был String, вы должны использовать конвертер для преобразования типа.

т.е. @TypeConverter(dataType=Long.class)

Но на самом деле, если у вас тип базы данных NUMBER, вы должны использовать числовой тип в Java. Вы все еще можете иметь метод get/set, который принимает String, если хотите. Также использование @GeneratedValue для типа String является странным.

Другие вопросы по тегам