2011-07-12 15 views
5

Eski bir veritabanında char alanlarını eşlerken, boşluk boşluğunu çıkarmak için olası çözümler nelerdir? Grails GORM ile eski bir veri tabanındaki char alanlarından kesişen çizgileri kesiyor

  • geçersiz kılma özelliği erişimcileri boşluk kesmek için hazırda Kullanıcıtürü kullanma .trim()
  • dönmek için kullanım noktasına (kontrolör, bakış, vs) en .trim() çağrılması

    • :

      aşağıdaki seçenekleri görmek

    Etki alanı özelliklerinin uygulama genelinde tutarlı kalmasını sağlamak için özellik erişimcisini geçersiz kılmayı tercih ediyorum .

  • cevap

    2

    Benzer bir sorunla karşılaştım ve eski verileri değiştiremedim. Diğer geliştiricilerime şeffaflık uğruna erişimciyi geçersiz kıldım. Geçici bir alan kullanmanızı tavsiye ederim, böylece her çağrıda String'i kırpmanız gerekmez. Bununla birlikte,; Tablodaki verileri temizleyebilirseniz, bir görünüm oluşturun veya bunun yerine bunu yapacağım yeni bir tabloya aktarın.

    +0

    Doğrulamayı nasıl ele aldınız? Görünüşe göre Grails geçici özellikler üzerindeki kısıtlamaları doğrulamıyor. – jamesallman

    +0

    Evet - Grails geçici alanlar için standart doğrulamayı kullanmaktan hoşlanmaz. El ile ele almak ve mesajları flaş kapsamına eklemek için uğraşmak zorundasınız. Belki de biraz daha saydam hissettirmek ve oradaki doğrulamayı yapmak için BeforeSave önleyiciyi kullanmayı düşünebilirsiniz. –

    +1

    ** Görüntüleme hoş bir çözümdür **. Görünümler yalnızca alt sorgular olarak değiştirilir, bazı DB motorları sonuç sorgularını optimize edebilir (alt sorguları önler). Ayrıca görünümde çok fazla katılımınız varsa ** materyalize görünüm ** oluşturmak mümkündür. Tablodan gelen ** indeksler ** göz önünde bulundurulur. – gavenkoa

    3

    Ben global eşlenen hazırda Kullanıcıtürü kullanmak ve büyük (uygulama http://www.hibernate.org/388.html dayalı, ancak UserType arayüze kırma değişiklikleri için güncellendi) çalışır: Groovy.config içinde

    package company 
    
    import org.hibernate.Hibernate 
    import org.hibernate.usertype.UserType 
    
    import java.sql.PreparedStatement 
    import java.sql.ResultSet 
    import java.sql.SQLException 
    import java.sql.Types 
    
    /** 
    * Map CHAR(x) types to String: trim when getting and setting the CHAR(x) 
    * based on www.hibernate.org/388.html 
    */ 
    public class TrimmedString implements UserType { 
        public TrimmedString() { 
        } 
    
        public int[] sqlTypes() { 
         return [Types.CHAR] as int[]; 
        } 
    
        @SuppressWarnings("unchecked") 
        public Class returnedClass() { 
         return String.class; 
        } 
    
        public boolean equals(Object x, Object y) { 
         return (x == y) || (x != null && y != null && (x.equals(y))); 
        } 
    
        public Object nullSafeGet(ResultSet inResultSet, String[] names, Object o) throws SQLException { 
         String val = (String) Hibernate.STRING.nullSafeGet(inResultSet, names[0]); 
         return val == null ? null : val.trim(); 
        } 
    
        public void nullSafeSet(PreparedStatement inPreparedStatement, Object o, int i) throws SQLException { 
         String val = (String) o; 
         inPreparedStatement.setString(i, val); 
        } 
    
        public Object deepCopy(Object o) { 
         if (o == null) { 
          return null; 
         } 
         return new String(((String) o)); 
        } 
    
        public boolean isMutable() { 
         return false; 
        } 
    
        public Object assemble(Serializable cached, Object owner) { 
         return cached; 
        } 
    
        public Serializable disassemble(Object value) { 
         return (Serializable) value; 
        } 
    
        public Object replace(Object original, Object target, Object owner) { 
         return original; 
        } 
    
        public int hashCode(Object x) { 
         return x.hashCode(); 
        } 
    } 
    

    küresel haritalama:

    grails.gorm.default.mapping = { 
        'user-type'(type: company.TrimmedString, class: String) //map Char(x) columns mapped to string fields as trimmed string 
    }