我有以下课程。 StockId 类代表 Stock 类的ID。股票类代表下表:
CREATE TABLE stock(id NUMBER(10),stock_code VARCHAR2(30),stock_name VARCHAR2(100),CONSTRAINT pk_stock PRIMARY KEY(id));
股票分类
@Embeddable
public class StockId implements Serializable {
private Long id;
public StockId() {}
public StockId(Long id) {
this.id = id;
}
@Column(name="id")
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
}
股票类
@Entity
@Table(name="stock")
public class Stock {
private StockId stockId;
private String stockCode;
private String stockName;
public Stock() {}
public Stock(StockId stockId, String stockCode, String stockName) {
this.stockId = stockId;
this.stockCode = stockCode;
this.stockName = stockName;
}
@Id
// Here what should I give ?
public StockId getStockId() {
return stockId;
}
public void setStockId(StockId stockId) {
this.stockId = stockId;
}
public String getStockCode() {
return stockCode;
}
public void setStockCode(String stockCode) {
this.stockCode = stockCode;
}
public String getStockName() {
return stockName;
}
public void setStockName(String stockName) {
this.stockName = stockName;
}
}
我的问题是,如何设计一个休眠生成器来从序列生成StockId?
答案 0 :(得分:0)
按如下方式创建自定义生成器:
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class StockIdGenerator implements IdentifierGenerator {
@Override
public Serializable generate(SharedSessionContractImplementor session, Object o) throws HibernateException {
Connection connection = session.connection();
try {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT stock_sequence.NEXTVAL FROM DUAL");
if (resultSet.next()) {
return new StockId(resultSet.getLong(1));
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
然后在Stock类中执行以下操作:
@Entity
@Table(name="stock")
public class Stock {
@Id
@Embedded
@GenericGenerator(name = "stock_id_generator",
strategy = "name.kaushikam.hibernate.domain.model.StockIdGenerator")
@GeneratedValue(generator = "stock_id_generator")
private StockId stockId;
private String stockCode;
private String stockName;
public Stock() {}
public Stock(StockId stockId, String stockCode, String stockName) {
this.stockId = stockId;
this.stockCode = stockCode;
this.stockName = stockName;
}
public StockId getStockId() {
return stockId;
}
public void setStockId(StockId stockId) {
this.stockId = stockId;
}
public String getStockCode() {
return stockCode;
}
public void setStockCode(String stockCode) {
this.stockCode = stockCode;
}
public String getStockName() {
return stockName;
}
public void setStockName(String stockName) {
this.stockName = stockName;
}
}