@Entity(name="rights")
public class Right {
    @Id
@GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(length = 100, unique = true)
    @NotNull(message = "입력해주세요.")
    @Size(min = 1, message = "입력해주세요.")
    private String name;
    @Column
    private String descr;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDescr() {
        return descr;
    }
    public void setDescr(String descr) {
        this.descr = descr;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Right right = (Right) o;
        if (name != null ? !name.equals(right.name) : right.name != null) return false;
        return true;
    }
    @Override
    public int hashCode() {
        return name != null ? name.hashCode() : 0;
    }
}
필드 몇개 추가하고 JPA 애노테이션 추가한 다음 Member 쪽에 Set 타입으로 @ManyToMany 연결.
이때 right는 DB 예약어일 수 있으니 rights라는 이름을 사용하도록 설정 해줌. 
IDEA가 코드 생성 메뉴 상숑해서 hashCode랑 equals 구현. 이때 name 필드만 사용.
자 이제 GenericXXX를 이용해서 CRUD 코드 5분 완성.
public interface RightDao extends GenericDao<Right, RightSearchParam> {
}
@Repository
public class RightDaoImpl extends GenericDaoImpl<Right, RightSearchParam> implements RightDao {
    protected void applySearchParam(Criteria c, RightSearchParam rightSearchParam) {
        CriteriaUtils.addOptionalLike(c, "name", rightSearchParam.getName());
    }
    
}
public interface RightService extends GenericService<Right, RightSearchParam>{
}
@Service
@Transactional
public class RightServiceImpl extends GenericServiceImpl<RightDao, Right, RightSearchParam> implements RightService{
}
@Controller
@RequestMapping("/system/right")
public class RightController extends GenericController<RightService, RightRef, Right, RightSearchParam> {
}
@Component
public class RightRef {
}
public class RightSearchParam {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
이걸로 서버쪽 코딩 끝. 이제 화면 코드는 태그 파일 활용해서 역시 5분 완성.
<page:editpage label="권한 수정">
    <f:input label="권한" path="name" />
    <f:textarea label="설명" path="descr" />
</page:editpage>
<page:mgtpage label="권한 관리">
    <page:search label="권한 검색">
        <s:input label="이름" path="name" />
    </page:search>
    <script type="text/javascript">
        $(function() {
            $("#smdis-grid").jqGrid({
                colNames:['id', '권한명', '설명'],
                colModel :[
                    {name:'id', index:'id', width:55, hidden:true},
                    {name:'name', index:'name', width:100},
                    {name:'descr', index:'descr', width:100}
                ]
            });
        });
    </script>
</page:mgtpage>
<page:newpage label="새 권한">
    <f:input label="이름" path="name"/>
    <f:textarea label="설명" path="descr" />
</page:newpage>
<page:viewpage label="계정 정보">
    <v:text label="id" value="${model.id}"/>
    <v:text label="이름" value="${model.name}"/>
    <v:text label="설명" value="${model.descr}"/>
</page:viewpage>
끝..
도메인 코딩 5분, 서버 코딩 5분, 화면 코딩 5분...
초간단 CRUD 구현하는데 15분.