2015-10-13 18 views
10

Hazırda bekletme konusunda yeniyim. Ne yapmaya çalıştığım, Adres sınıfım için bir tanımlayıcı oluşturmak için @CollectionId kullanmaktır. Bunun için Collection arayüzünü kullandım. Ancak, @GenericGenerator kullanıp hilo'ya strateji belirlediğimde, bir Özel Durum atar. Ben son hazırda kullanıyorumHiLo jeneratör stratejisi çalışmıyor

Exception in thread "main" org.hibernate.MappingException: Could not instantiate id generator [entity-name=null] 
    at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:121) 
    at org.hibernate.mapping.SimpleValue.createIdentifierGenerator(SimpleValue.java:259) 
    at org.hibernate.persister.collection.AbstractCollectionPersister.<init>(AbstractCollectionPersister.java:429) 
    at org.hibernate.persister.collection.BasicCollectionPersister.<init>(BasicCollectionPersister.java:57) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at org.hibernate.persister.internal.PersisterFactoryImpl.createCollectionPersister(PersisterFactoryImpl.java:152) 
    at org.hibernate.persister.internal.PersisterFactoryImpl.createCollectionPersister(PersisterFactoryImpl.java:140) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:408) 
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) 
    at com.hbt.HibernateTest.main(HibernateTest.java:35) 
Caused by: java.lang.UnsupportedOperationException: Support for 'hilo' generator has been removed 
    at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.getIdentifierGeneratorClass(DefaultIdentifierGeneratorFactory.java:132) 
    at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.createIdentifierGenerator(DefaultIdentifierGeneratorFactory.java:112) 
    ... 14 more 

: Ben şu istisna olsun

@Entity 
@Table(name = "USER_DETAILS") 
public class UserDetails { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int userId; 
    private String userName; 

    @ElementCollection 
    @JoinTable(name="USER_ADDRESS", 
     [email protected](name="USER_ID") 
    ) 

    @GenericGenerator(name = "hilo-gen", strategy = "hilo") 
    @CollectionId(columns = { @Column(name="ADDRESS_ID") }, generator = "hilo-gen", type = @Type(type="long")) 
    private Collection<Address> address = new ArrayList<Address>(); 

    public int getUserId() { 
     return userId; 
    } 

    public void setUserId(int userId) { 
     this.userId = userId; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public Collection<Address> getAddress() { 
     return address; 
    } 

    public void setAddress(List<Address> address) { 
     this.address = address; 
    } 
} 

: İşte benim kod. Ne yapmalıyım?

+0

Ayrıca veritabanımda MySql kullanıyorum –

cevap

24

Hilo bu kaldırıldı 'hilo' jeneratör için

@GenericGenerator(name="sequence-gen",strategy="sequence") 
+2

'halo' kaldırma nedenini açıklayabilir misiniz –

0

Hi/Lo stratejisinin birini seçebilir gerekir: Bir dizinin

  • MultipleHiLoPerTableGenerator ile Hi arkaya::

    Öğreticiniz olabildiğince yakın olmak için kodunuzda "hilo" ifadesini "seqhilo" olarak değiştiririm.

  • +0

    En son hazırda bekletmede herhangi bir değişiklik oldu mu? Ben takip ediyorum öğretici hibernate 3.0 kullanıyorum. Ve hibernate 5.0 kullanıyorum. En son sürüm hilo'yu desteklemiyor mu? –

    +0

    Değişikliği ne zaman yaptığını bilmiyorum, ama bildiğim kadarıyla yukarıdaki stratejilerden birini kullanmalısınız. Mümkün olduğunca öğreticinize olabildiğince yakın olmak için "hilo" değerini "seqhilo" olarak değiştiririm –

    +0

    @AdityaSawant 'hilo' jeneratörü desteği kaldırıldı – kommradHomer

    0

    Destek çalışmalı, artık desteklenmemektedir. Ek bilgi için bu link size kullanımdan kaldırılmış bir liste sunar.

    Bunu üstesinden gelmek için dizi üreteci'u kullanabilirsiniz. Bu sorununu çözecektir.

    @Entity 
    @Table(name = "USER_DETAILS") 
    public class UserDetails { 
    
        @Id 
        @GeneratedValue(strategy = GenerationType.IDENTITY) 
        private int userId; 
        private String userName; 
    
        @ElementCollection 
        @JoinTable(name="USER_ADDRESS", 
         [email protected](name="USER_ID") 
        ) 
    
        @GenericGenerator(name = "sequence-gen", strategy = "sequence") 
        @CollectionId(columns = { @Column(name="ADDRESS_ID") }, generator = "sequence-gen", type = @Type(type="long")) 
        private Collection<Address> address = new ArrayList<Address>(); 
    
        public int getUserId() { 
         return userId; 
        } 
    
        public void setUserId(int userId) { 
         this.userId = userId; 
        } 
    
        public String getUserName() { 
         return userName; 
        } 
    
        public void setUserName(String userName) { 
         this.userName = userName; 
        } 
    
        public Collection<Address> getAddress() { 
         return address; 
        } 
    
        public void setAddress(List<Address> address) { 
         this.address = address; 
        } 
    }