我已经编写了自己的IdGenerator:

public class AkteIdGenerator implements IdentifierGenerator {
   public Serializable generate(SessionImplementor session, Object object)
         throws HibernateException {
      // if custom id is set -> use this id
      if (object instanceof SomeBean) {
         SomeBean someBean = (SomeBean) object;
         Long customId = someBean.getCustomId();
         if (customId != 0) {
            return customId;
         }
      }
      // otherwise --> call the SequenceGenerator manually
      SequenceStyleGenerator sequenceGenerator ...
   }
}

有谁知道我怎么能从生成器类中调用sequenceGenerator,通常我可以为每个注释定义什么:
@GeneratedValue(
        strategy = GenerationType.SEQUENCE,
        generator = "MY_SEQUENCE")
@SequenceGenerator(
        allocationSize = 1,
        name = "MY_SEQUENCE",
        sequenceName = "MY_SEQUENCE_NAME")

我将非常感谢您提供任何解决方案!!!!

非常感谢,诺伯特

最佳答案

您可以从Generator类轻松调用SequenceGenerator。通过编写此代码。
自定义生成器类应为

 public class StudentNoGenerator implements IdentifierGenerator {

public Serializable generate(SessionImplementor session, Object object)throws HibernateException {

    SequenceGenerator generator=new SequenceGenerator();
    Properties properties=new Properties();
    properties.put("sequence","Stud_NoSequence");
    generator.configure(Hibernate.STRING, properties, session.getFactory().getDialect());
    return generator.generate(session, session);

}

}
在上面的代码中,Stud_NoSequence是序列名称,应创建该序列名称。在数据库中拧create sequence Stud_NoSequence;Hibernate.String是SequenceGenerator类将返回的类型。

和域类将是
import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    @Entity
    @org.hibernate.annotations.GenericGenerator(
    name = "Custom-generator",
    strategy = "com.ssis.id.StudentNoGenerator"
    )
    public class Student {
@Id @GeneratedValue(generator = "Custom-generator")
String rno;
@Column
String name;
public String getRno() {
    return rno;
}
public void setRno(String rno) {
    this.rno = rno;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
    }

关于java - hibernate :手动调用SequenceGenerator?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5388573/

10-11 02:25