Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách ánh xạ một chuỗi thành chuỗi DB trong Hibernate

Triển khai một lớp Mã định danh tùy chỉnh; từ một bài đăng trên 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;
    }
}

Chú thích PK thực thể như sau:

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

Do lỗi trong Eclipse, có thể xảy ra lỗi mà trình tạo (seq_id ) không được xác định trong đơn vị độ bền. Đặt giá trị này thành cảnh báo như sau:

  1. Chọn Cửa sổ »Tuỳ chọn
  2. Mở rộng Tính bền của Java »JPA» Lỗi / Cảnh báo
  3. Nhấp vào Truy vấn và trình tạo
  4. Đặt Trình tạo không được xác định trong đơn vị duy trì tới:Warning
  5. Nhấp vào OK để áp dụng các thay đổi và đóng hộp thoại


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chuyển vào tên bảng dưới dạng tham số plsql

  2. Oracle REGEXP_LIKE và ranh giới từ

  3. Quy trình do người dùng xác định với DBMS_STATS, Phần II

  4. Lỗi ORA-00932 khi sử dụng lựa chọn với các trường union và CLOB

  5. Lỗi SQL:ORA-02291:ràng buộc toàn vẹn