#hibernate #jpa #orm #hibernate-mapping
#спящий режим #jpa #orm #hibernate-сопоставление
Вопрос:
Я использую Hibernate для сопоставления таблицы MySQL с классом сущностей. При запуске приложения я сталкиваюсь с ошибкой сопоставления таблицы объекта:
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [id] in table [accomodation]; found [bigint (Types#BIGINT)], but expecting [decimal(19,2) (Types#NUMERIC)]
Итак, у меня есть следующая таблица с именем acccomodation:
Field Type Null Key Default Extra
---------------------------------------------------------------------------------------------------------------------------
id bigint(20) unsigned NO PRI auto_increment
user_id bigint(20) unsigned NO MUL
accomodation_name varchar(255) NO
description text NO
nation varchar(255) NO
region varchar(255) NO
province varchar(255) NO
city varchar(255) NO
geographical_position point NO
stars int(10) NO
accomodation_typological_id bigint(20) unsigned YES
accomodation_service_id bigint(20) unsigned YES
tell varchar(255) YES
mobile varchar(255) YES
fax varchar(255) YES
email varchar(255) YES
time_stamp datetime YES
Предыдущая таблица сопоставлена этим классом размещения:
@Entity
@Table(name = "accomodation")
public class Accomodation implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private BigInteger id;
//private Integer id;
/*@ManyToOne
private Users users;
*/
@OneToMany(mappedBy = "accomodation")
private List<Room> rooms;
private String name;
private String description;
private String phone;
private String mobile;
private String fax;
private String email;
private Integer stars;
private Double longitude;
private Double latitude;
// CONSTRUCTOR AND GETTER AND SETTER METHODS
...........................................................
...........................................................
...........................................................
}
Итак, при чтении ошибки кажется, что существует ошибка сопоставления в поле id моей таблицы размещения, отображенной в соответствующем поле id класса размещения.
Проблема, по-видимому, заключается в том, что, используя BigInteger в качестве типа поля id в сопоставленном классе, я должен использовать десятичное число (19,2) в поле id таблицы. Но я думаю, что это нехорошо, потому что первичным ключом таблицы должен быть беззнаковый BigInt в БД.
Итак, какой тип данных Java я должен использовать в своем классе, чтобы правильно сопоставить этот беззнаковый BigInt?
как вы можете видеть в предыдущих 2 фрагментах кода
Ответ №1:
Вы должны иметь возможность сопоставлять Mysql тип bigint (20) с Java primitive long, например:
@Entity
@Table(name = "accomodation")
public class Accomodation implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
Однако, согласно этой документации, вы также должны уметь использовать java.math.BigInteger.
Моя рекомендация — проверить версию вашего драйвера.