#spring #hibernate #spring-orm
#spring #спящий режим #spring-orm
Вопрос:
Я создал таблицы user и UserRole
пользовательская сущность
@Entity
@Table(name = "USERS")
public class User {
@Id
@Column(name = "USERNAME", nullable = false, unique = true)
private String username;
@Column(name = "PASSWORD", nullable = false)
private String password;
@Column(name = "ENABLED", nullable = false)
private boolean enabled = true;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.EAGER)
private Set<UserRole> userRole = new HashSet<>();
Пользовательская сущность
@Entity
@Table(name = "USER_ROLES", uniqueConstraints = @UniqueConstraint(
columnNames = { "ROLE", "USERNAME" }))
public class UserRole {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "user_role_id",
unique = true, nullable = false)
private Integer userRoleId;
@Column(name = "ROLE")
private String role;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "USERNAME")
private User user;
Когда я запускаю свое приложение, я получаю ошибку и эту трассировку стека:
ERROR JdbcEnvironmentImpl:420 - Could not fetch the SequenceInformation from the database
org.h2.jdbc.JdbcSQLException: Column "start_with" not found [42122-197]
Но у меня нет никаких столбцов ‘start_with’. Раньше у моего объекта UserRole не было столбца userRoleId, и все работало нормально, но затем я добавил его, чтобы сделать столбец ‘role’ не уникальным, и тогда это произошло. Но по-прежнему все работает нормально, меня просто беспокоит эта ошибка, что может быть причиной этого?
Ответ №1:
Я предлагаю проверить ваш диалект гибернации.
У меня была похожая ошибка из-за start_value
столбца, который Hibernate искал в последовательностях моей базы данных PostgreSQL. Это имя поля является значением по умолчанию в SequenceInformationExtractorLegacyImpl
классе Hibernate, который имеет много подклассов, каждый из которых зависит от вашего конкретного сервера базы данных и его версии. Hibernate загружает правильный класс в соответствии с указанным вами диалектом.
В моем случае я использовал org.hibernate.dialect.PostgreSQLDialect
dialect, (устаревший) класс, предназначенный для использования с версией PostgeSQL 8.2. Я переключился на org.hibernate.dialect.PostgreSQL9Dialect
, поскольку моя база данных была размещена на сервере PostgreSQL 9. И проблема исчезла.
Комментарии:
1. Я использую org.hibernate.dialect. HSQLDialect.
2. Действительно, у вас есть только один возможный диалект для базы данных Hsql. В любом случае я ошибался: я думал, что моя ошибка исчезла, но она все еще была там. Настоящей причиной моей проблемы является эта ошибка hibernate.atlassian.net/browse/HHH-13291
3. Спустя почти год я погуглил тот же вопрос и нашел свой вопрос здесь. Повторите это снова, и я понял, что этот человек был прав. Все это время я использовал неправильный диалект.
4. Я также сталкиваюсь с той же проблемой, можете ли вы, пожалуйста, сказать мне, даже с этой ошибкой, почему приложение работает, и проблемы нет
5. вероятно, потому, что try catch скрыт внутри dialect. Не удается найти столбец, но игнорируется эта ошибка и продолжается.