Hibernate Tool hbm2ddl ScehmaUpdate Последовательности таблиц не генерируются
Я пытаюсь создать таблицы программно, используя "org.hibernate.tool.hbm2ddl.SchemaUpdate". Кажется, все работает нормально, но есть одна проблема. Это не генерация последовательности таблиц. Странно то, что если я попытаюсь запустить это на новой базе данных (Oracle или Postgres), все тоже будут созданы последовательности, но когда я пытаюсь запустить на том же соединении с базой данных, но с другим пользователем базы данных, он не будет генерировать последовательности.
Например: dbUrl: jdbc:oracle:thin:@10.10.10.38:1521/xe имя пользователя: пароль администратора: admin
Если я попытаюсь запустить выше db в первый раз, все будет работать, но если я попытаюсь снова запустить тот же db с другим пользователем, последовательности не будут сгенерированы.
Например: dbUrl: jdbc:oracle:thin:@10.10.10.38:1521/xe имя пользователя: dbuser пароль: dbuser
Последовательности не будут сгенерированы для этого пользователя БД.
Пример класса сущности:
@Entity
@Table(name="AGT_AGENT_INFO")
public class Agent implements Serializable {
private static final long serialVersionUID = 1561953953959915052L;
@Id
@Column(name="ID")
@GeneratedValue(strategy=GenerationType.SEQUENCE , generator="agent_generator")
@SequenceGenerator(name="agent_generator", sequenceName="agent_seq", allocationSize=1,initialValue=4)
private Integer id;
@Column(name="USERNAME", unique = true)
private String username;
@Column(name="PASSWORD")
private String password;
@Transient
private Role role;
@Column(name="ROLE_ID")
private Integer roleId;
@Column(name="ROLE_NAME")
private String roleName;
Код, который я использую для программной генерации схемы.
try {
Map<String, String> map = new HashMap<String, String>();
map.put(Environment.HBM2DDL_AUTO, environment.getProperty("hbm2ddl_auto"));
map.put(Environment.DIALECT, environment.getProperty("hibernate.dialect"));
map.put(Environment.DRIVER, environment.getProperty("jdbc.driver"));
map.put(Environment.SHOW_SQL, environment.getProperty("hibernate.show.sql"));
map.put(Environment.URL, dbUrl);
map.put(Environment.USER, dbUsername);
map.put(Environment.PASS, dbKey);
map.put(Environment.DEFAULT_SCHEMA, defaultSchema);
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().applySettings(map).build();
try {
MetadataSources metaDataSource = new MetadataSources(ssr);
Class<?>[] classes = loadEntityClasses(schemaType);
for (Class<? extends Object> c : classes) {
metaDataSource.addAnnotatedClass(c);
}
final MetadataImplementor metadata = (MetadataImplementor) metaDataSource.buildMetadata();
metadata.validate();
SchemaUpdate su = new SchemaUpdate(ssr, metadata);
su.setHaltOnError(true);
su.setDelimiter(";");
su.setFormat(true);
su.execute(true, true);
} catch (Exception ex) {
logger.error(Util.getExceptionMessage(ex));
throw new ApiException(Constants.SERVICE_EXCEPTION, ex.getMessage());
} finally {
StandardServiceRegistryBuilder.destroy(ssr);
}
} catch (GenericJDBCException e) {
logger.error(Util.getExceptionMessage(e));
throw new ApiException(Constants.SERVICE_EXCEPTION, e.getMessage());
}