Hibernate Tool hbm2ddl Таблица ScehmaUpdate Последовательности не генерируются - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь создать таблицы программно, используя "org.hibernate.tool.hbm2ddl.SchemaUpdate". Кажется, все работает нормально, но есть одна проблема.Это не генерация последовательности таблиц.Странно то, что если я попытаюсь запустить это на новой базе данных (Oracle или Postgres), все тоже будут созданы последовательности, но когда я пытаюсь запустить на том же соединении с базой данных, но с другим пользователем базы данных, он не будет генерироватьпоследовательности.

Например: dbUrl: jdbc: oracle: thin: @ 10.10.10.38: 1521 / xe имя пользователя: пароль администратора: admin

Если я попытаюсь запустить выше db дляв первый раз все будет работать, но если я попытаюсь снова запустить на том же БД с другим пользователем, последовательности не будут сгенерированы.

Например: dbUrl: jdbc: oracle: thin: @ 10.10.10.38: 1521/ xe username: 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());
    }
...