我尝试使用下面的代码多次在表中插入id值,但是它总是抛出org.hibernate.id.IdentifierGenerationException:此类的id必须在调用save():com.app.entites之前手动分配。 LDetails
以下是实体类中的代码
@Column(name="LID")
@GenericGenerator(name="generatedId", strategy="com.app.common.IdGenerator")
@GeneratedValue(generator="generatedId", strategy=GenerationType.SEQUENCE)
@NotNull
private String lId;
我已经使用IdentifierGenerator实现了id生成器,如下所示:
public class IdGenerator implements IdentifierGenerator{
private static String id;
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
Connection con = session.connection();
try {
Statement statement = con.createStatement();
ResultSet rs = statement.executeQuery("select count(ID) from L_DETAILS");
if(rs.next()) {
int i = rs.getInt(1)+1;
this.id="ll"+i;
System.out.println("generated id is "+id);
return "l"+i;
}
}catch(SQLException e) {
e.printStackTrace();
}
return null;
}
}
答案 0 :(得分:1)
您忘记在顶部添加@Id
注释。您添加了@GeneratedValue
批注的事实并不意味着您可以保留@Id
批注。您仍然需要它。
答案 1 :(得分:0)
使用以下方法在您的实体类中自动生成主键:-
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Entity;
@Entity
@Table(name = "your_table_name")
public class YourEntityClass{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private long id;
//other column names
// setter & getter methods
}
此后,每当您在表中保存新记录时,都不必生成新ID