Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zmapować ciąg do sekwencji DB w Hibernate?

Zaimplementuj niestandardową klasę IdentifierGenerator; z wpisu na blogu:

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;
    }
}

Opisz jednostkę PK w ten sposób:

@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;
}

Z powodu błędu w Eclipse może pojawić się błąd, że generator (seq_id ) nie jest zdefiniowana w jednostce trwałości. Ustaw to ostrzeżenie w następujący sposób:

  1. Wybierz Okno » Preferencje
  2. Rozwiń Trwałość Java » JPA » Błędy/ostrzeżenia
  3. Kliknij Zapytania i generatory
  4. Ustaw Generator nie jest zdefiniowany w jednostce trwałości do:Warning
  5. Kliknij OK aby zastosować zmiany i zamknąć okno dialogowe


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Powrót z Open World 2013

  2. Jak uzyskać informacje o właścicielu indeksu i tabeli w Oracle?

  3. Funkcja SUBSTR() w Oracle

  4. Jak włączyć śledzenie w aplikacjach Oracle r12

  5. wyświetl niestandardowy tekst sql z wyniku kolumny tabeli