Grails 如何将整数(在数据库中)映射到字符串(在视图中)

Grails 如何将整数(在数据库中)映射到字符串(在视图中),grails,gorm,grails-domain-class,Grails,Gorm,Grails Domain Class,我有一个域类: class MyUser { .. int sex int qualification int occupation .. } 假设我要约束这些整数类别,例如: occupation : [0:"not occupied", 1:"architect", 2:"student", 3:"policeman" and so on..] 我希望在数据库中显示整型值,并在视图中显示整型的字符串表示形式(是否可以自动构建此行为?) 有没有一种方法可以用grails的方式快速实

我有一个域类:

class MyUser {

 ..

int sex
int qualification
int occupation

..
}
假设我要约束这些整数类别,例如:

occupation : [0:"not occupied", 1:"architect", 2:"student", 3:"policeman" and so on..]
我希望在数据库中显示整型值,并在视图中显示整型的字符串表示形式(是否可以自动构建此行为?)

有没有一种方法可以用grails的方式快速实现这一点


谢谢

我建议用一个对象来表示职业,就像这样

class MyUser {
...
    int sex
    int qualification
    Occupation occupation
...
}
那么你的职业课会是这样的

class Occupation {
    ...
    String name
    ...
}
    public enum Occupation {
        GEEK(0, 'Geek'),
        NERD(1, 'Nerd'),

        final int id;
        final String name;

        Occupation (int id, String name) {
          this.id = id;
          this.name = name;
       }
    }
   class MyUser {
    ...
        int sex
        int qualification
        int occupation
    ...
    }
 <g:select name="occupation" id="occupation"
                        from="${Occupation.values()}" 
                        value="${fieldValue(bean: user, field: 'occupation')}" 
                        optionKey="id"
                        optionValue="name"/>
但是如果您坚持使用枚举类型,您可以这样做

class Occupation {
    ...
    String name
    ...
}
    public enum Occupation {
        GEEK(0, 'Geek'),
        NERD(1, 'Nerd'),

        final int id;
        final String name;

        Occupation (int id, String name) {
          this.id = id;
          this.name = name;
       }
    }
   class MyUser {
    ...
        int sex
        int qualification
        int occupation
    ...
    }
 <g:select name="occupation" id="occupation"
                        from="${Occupation.values()}" 
                        value="${fieldValue(bean: user, field: 'occupation')}" 
                        optionKey="id"
                        optionValue="name"/>
您的MyUser类希望这样

class Occupation {
    ...
    String name
    ...
}
    public enum Occupation {
        GEEK(0, 'Geek'),
        NERD(1, 'Nerd'),

        final int id;
        final String name;

        Occupation (int id, String name) {
          this.id = id;
          this.name = name;
       }
    }
   class MyUser {
    ...
        int sex
        int qualification
        int occupation
    ...
    }
 <g:select name="occupation" id="occupation"
                        from="${Occupation.values()}" 
                        value="${fieldValue(bean: user, field: 'occupation')}" 
                        optionKey="id"
                        optionValue="name"/>
你们gsp会喜欢这样的东西

class Occupation {
    ...
    String name
    ...
}
    public enum Occupation {
        GEEK(0, 'Geek'),
        NERD(1, 'Nerd'),

        final int id;
        final String name;

        Occupation (int id, String name) {
          this.id = id;
          this.name = name;
       }
    }
   class MyUser {
    ...
        int sex
        int qualification
        int occupation
    ...
    }
 <g:select name="occupation" id="occupation"
                        from="${Occupation.values()}" 
                        value="${fieldValue(bean: user, field: 'occupation')}" 
                        optionKey="id"
                        optionValue="name"/>


这未经测试,但应该有效。享受。

如果您愿意,您也可以使用map并通过控制器查看……

为什么您试图使用map而不是类来表示职业?是的;但对于性:我是否也应该为它做一个榜样?我认为最好在数据库上有一个整数direclty(出于性能原因),并在视图上显示男性或女性..这一级别的性能不是问题,您可以用自己的思维方式来深入研究。缓存将解决许多性能问题,映射实际上可能会变慢,因为它可能不受缓存控制。在出现性能问题时处理这些问题。