Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да съпоставите низ с DB последователност в Hibernate

Реализирайте персонализиран клас IdentifierGenerator; от публикация в блог:

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.id.IdentifierGenerator;

public class StringKeyGenerator implements IdentifierGenerator {

    @Override
    public Serializable generate(SessionImplementor session, Object collection) throws HibernateException {
        Connection connection = session.connection();
        PreparedStatement ps = null;
        String result = "";

        try {
            // Oracle-specific code to query a sequence
            ps = connection.prepareStatement("SELECT TABLE_SEQ.nextval AS TABLE_PK FROM dual");
            ResultSet rs = ps.executeQuery();

            if (rs.next()) {
                int pk = rs.getInt("TABLE_PK");

                // Convert to a String
                result = Integer.toString(pk);
            }
        } catch (SQLException e) {
            throw new HibernateException("Unable to generate Primary Key");
        } finally {
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    throw new HibernateException("Unable to close prepared statement.");
                }
            }
        }

        return result;
    }
}

Анотирайте обекта PK по следния начин:

@Id
@GenericGenerator(name="seq_id", strategy="my.package.StringKeyGenerator")
@GeneratedValue(generator="seq_id")
@Column(name = "TABLE_PK", unique = true, nullable = false, length = 20)
public String getId() {
    return this.id;
}

Поради грешка в Eclipse може да възникне грешка, че генераторът (seq_id ) не е дефиниран в единицата за постоянство. Задайте това на предупреждение, както следва:

  1. Изберете Прозорец » Предпочитания
  2. Разгънете Постоянство на Java » JPA » Грешки/Предупреждения
  3. Щракнете върху Заявки и генератори
  4. Настройте Генераторът не е дефиниран в единицата за постоянство до:Warning
  5. Щракнете върху OK за да приложите промените и да затворите диалоговия прозорец


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам ключовата дума 'as' за псевдоним на таблица в Oracle?

  2. Това е в подробностите

  3. Водещи въпроси относно JAVA/JRE в приложенията на Oracle

  4. ЕКСПОРТИРАНЕ КАТО ИЗЯВЛЕНИЯ ЗА ВМЕСВАНЕ:Но в SQL Plus редът отменя 2500 знака!

  5. FROM_TZ() Функция в Oracle