2011-03-22 17 views
7

Kendi IdGenerator'ımı yazdım:Hazırda bekletme: Bir Sırasıyla SequenceGenerator'ı arayın.

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

Sıralı gösterim için normalde tanımlayabildiğim jeneratörü sınıfımdan sequenceGenerator'ı nasıl arayabileceğimi bilen var mı?

@GeneratedValue(
     strategy = GenerationType.SEQUENCE, 
     generator = "MY_SEQUENCE") 
@SequenceGenerator(
     allocationSize = 1, 
     name = "MY_SEQUENCE", 
     sequenceName = "MY_SEQUENCE_NAME") 

Çok minnettar olacağım çözeltiler !!!!

Çok teşekkürler, Norbert

cevap

6

Sen eassly senin Jeneratör sınıfından SequenceGenerator çağırabilir. Bu kodu yazarak. Özel jeneratör sınıfı Yukarıdaki kod Stud_NoSequence olarak

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

} 

}
olmalıdır oluşturulan tabaka yapılmalıdır Dizi adıdır. Data base in create sequence Stud_NoSequence; Hazırda bekletme.String, SequenceGenerator sınıfı tarafından döndürülen türdür.

ve etki alanı sınıfı

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

Yayınınız olacak dizinin adını güncellemek için yardımcı oldu.

Ay boyunca bir sıra kullanıyorum ve yapılandırma her tanımlayıcı nesli güncelleştirmiyor.

@Override 
public Serializable generate(SessionImplementor sessionImplementator, 
     Object object) throws HibernateException { 
    Calendar now = Calendar.getInstance(); 
    // If month sequence is wrong, then reconfigure. 
    if (now.get(Calendar.MONTH) != SEQUENCE_DATE.get(Calendar.MONTH)) { 
     super.configure(new LongType(), new Properties(), 
       sessionImplementator.getFactory().getDialect()); 
    } 
    Long id = (Long) super.generate(sessionImplementator, object); 
    String sId = String.format("%1$ty%1$tm%2$06d", SEQUENCE_DATE, id); 
    return Long.parseLong(sId);// 1301000001 
} 
İlgili konular