Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Cara memetakan string ke urutan DB di Hibernate

Menerapkan kelas IdentifierGenerator kustom; dari entri blog:

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

Beri anotasi pada entitas PK seperti ini:

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

Karena bug di Eclipse, kesalahan mungkin muncul bahwa generator (seq_id ) tidak didefinisikan dalam unit persistensi. Setel ini ke peringatan sebagai berikut:

  1. Pilih Jendela » Preferensi
  2. Perluas Kegigihan Java » JPA » Kesalahan/Peringatan
  3. Klik Kueri dan generator
  4. Set Generator tidak ditentukan dalam unit persistensi ke:Warning
  5. Klik Oke untuk menerapkan perubahan dan menutup dialog


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kumpulkan Massal Ke dan Jalankan Segera di Oracle

  2. Pisahkan nilai yang dipisahkan koma dari kolom dalam baris, melalui kueri Oracle SQL

  3. Tabel partisi Oracle

  4. 4 Cara Mengubah Zona Waktu di Oracle

  5. Menggunakan Oracle SQL, bagaimana satu hari menampilkan jumlah hari dalam seminggu dan hari dalam seminggu?