2017-03-20 15 views
0

休止状態のバージョンを3から5.0にアップグレードしようとしています。休止状態5でObjectNameNormalizerを取得する方法

hibernate5でObjectNameNormalizerを取得する方法をアドバイスできますか?私の現在のコードでは、コードを使ってその場でプロパティを設定しているので、変更できないセッションファクトリを取得するためにConfigurationを使用しています。このソリューションを試してみてください

Mappings mappings = c.createMappings(); (this method does not exist in 5.0) 

props.put(TableGenerator.IDENTIFIER_NORMALIZER, mappings.getObjectNameNormalizer()); 

答えて

0

- コードの下

は休止状態5に再書き込みする必要があります。我々は同じ問題に直面した。

package test.hibernate.generator; 

import java.io.Serializable; 
import java.util.Properties; 

import org.hibernate.HibernateException; 
import org.hibernate.MappingException; 
import org.hibernate.boot.model.naming.ObjectNameNormalizer; 
import org.hibernate.boot.registry.StandardServiceRegistry; 
import org.hibernate.boot.spi.MetadataBuildingContext; 
import org.hibernate.engine.spi.SessionImplementor; 
import org.hibernate.id.Configurable; 
import org.hibernate.id.IdentityGenerator; 
import org.hibernate.id.enhanced.TableGenerator; 
import org.hibernate.service.ServiceRegistry; 
import org.hibernate.testing.boot.MetadataBuildingContextTestingImpl; 
import org.hibernate.type.LongType; 
import org.hibernate.type.Type; 

import hu.gov.nebih.cdv.CdvHelper; 
import hu.gov.nebih.domain.entity.BaseEntity; 

public class CustomIdGenerator extends IdentityGenerator implements Configurable { 
    private CustomTableGenerator tableGenerator = new CustomTableGenerator(); 
    private ServiceRegistry serviceRegistry; 

    @Override 
    public Serializable generate(SessionImplementor session, Object obj) throws HibernateException { 
     if (obj == null) 
      throw new HibernateException(new NullPointerException()); 

     if (isIdNull(obj)) { 
      return generateCustomId(session, obj); 
     } else { 
      return getUsedId(obj); 
     } 
    } 

    private boolean isIdNull(Object obj) { 
     return (obj instanceof BaseEntity && ((BaseEntity) obj).getId() == null); 
    } 

    private Serializable getUsedId(Object obj) { 
     if (obj instanceof BaseEntity) { 
      return ((BaseEntity) obj).getId(); 
     } 
     return null; 
    } 

    private synchronized Serializable generateCustomId(SessionImplementor session, Object obj) { 
     configureTableGenerator(session, tableGenerator); 

     Long nextVal = (Long) tableGenerator.generate(session, obj); 

     if (nextVal != null) { 
      //any operation 
     } 

     return nextVal; 
    } 

    private CustomTableGenerator configureTableGenerator(SessionImplementor session, CustomTableGenerator tg) { 
     if (tg.isConfigured()) { 
      return tg; 
     } 

     final MetadataBuildingContext context = new MetadataBuildingContextTestingImpl((StandardServiceRegistry) serviceRegistry); 

     ObjectNameNormalizer normalizer = new ObjectNameNormalizer() { 
      @Override 
      protected MetadataBuildingContext getBuildingContext() { 
       return context; 
      } 
     }; 

     Properties params = new Properties(); 
     params.put(TableGenerator.TABLE_PARAM, "custom_sequence"); 
     params.put(TableGenerator.VALUE_COLUMN_PARAM, "next_val"); 
     params.put(TableGenerator.INITIAL_PARAM, 7000000); 
     params.put(TableGenerator.INCREMENT_PARAM, 1); 
     params.put(TableGenerator.IDENTIFIER_NORMALIZER, normalizer); 
     params.put(TableGenerator.SEGMENT_COLUMN_PARAM, "sequence_name"); 
     params.put(TableGenerator.SEGMENT_VALUE_PARAM, "value_param"); 

     tg.configure(new LongType(), params, session.getFactory().getServiceRegistry()); 
     tg.registerExportables(context.getMetadataCollector().getDatabase()); 
     tg.setConfigured(true); 

     return tg; 
    } 

    @Override 
    public void configure(Type type, Properties params, ServiceRegistry serviceRegistry) throws MappingException { 
     this.serviceRegistry = serviceRegistry; 
    } 

    class CustomTableGenerator extends TableGenerator { 
     private boolean configured = false; 

     public boolean isConfigured() { 
      return configured; 
     } 

     public void setConfigured(boolean configured) { 
      this.configured = configured; 
     } 
    } 
}