001// ______________________________________________________
002// Generated by sql2java - https://github.com/10km/sql2java-2-6-7 (custom branch) 
003// modified by guyadong from
004// sql2java original version https://sourceforge.net/projects/sql2java/ 
005// JDBC driver used at code generation time: com.mysql.jdbc.Driver
006// template: bean.java.vm
007// ______________________________________________________
008package net.gdface.facelog.db;
009import java.io.Serializable;
010import java.util.List;
011import java.util.Objects;
012
013import com.facebook.swift.codec.ThriftStruct;
014import com.facebook.swift.codec.ThriftField;
015import com.facebook.swift.codec.ThriftField.Requiredness;
016import io.swagger.annotations.ApiModel;
017import io.swagger.annotations.ApiModelProperty;
018/**
019 * FaceBean is a mapping of fl_face Table.
020 * <br>Meta Data Information (in progress):
021 * <ul>
022 *    <li>comments: 人脸检测信息数据表,用于保存检测到的人脸的所有信息(特征数据除外) </li>
023 * </ul>
024 * @author guyadong
025*/
026@ThriftStruct
027@ApiModel(description="人脸检测信息数据表,用于保存检测到的人脸的所有信息(特征数据除外)")
028public final class FaceBean
029    implements Serializable,BaseBean<FaceBean>,Comparable<FaceBean>,Constant,Cloneable
030{
031    private static final long serialVersionUID = -1428389659131258505L;
032    /** NULL {@link FaceBean} bean , IMMUTABLE instance */
033    public static final FaceBean NULL = new FaceBean().asNULL().asImmutable();
034    /** comments:主键 */
035    @ApiModelProperty(value = "主键" ,required=true ,dataType="Integer")
036    private Integer id;
037
038    /** comments:外键,所属图像id */
039    @ApiModelProperty(value = "外键,所属图像id" ,required=true ,dataType="String")
040    private String imageMd5;
041
042    /** comments:人脸位置矩形:x */
043    @ApiModelProperty(value = "人脸位置矩形:x" ,required=true ,dataType="Integer")
044    private Integer faceLeft;
045
046    /** comments:人脸位置矩形:y */
047    @ApiModelProperty(value = "人脸位置矩形:y" ,required=true ,dataType="Integer")
048    private Integer faceTop;
049
050    /** comments:人脸位置矩形:width */
051    @ApiModelProperty(value = "人脸位置矩形:width" ,required=true ,dataType="Integer")
052    private Integer faceWidth;
053
054    /** comments:人脸位置矩形:height */
055    @ApiModelProperty(value = "人脸位置矩形:height" ,required=true ,dataType="Integer")
056    private Integer faceHeight;
057
058    /** comments:左眼位置:x */
059    @ApiModelProperty(value = "左眼位置:x"  ,dataType="Integer")
060    private Integer eyeLeftx;
061
062    /** comments:左眼位置:y */
063    @ApiModelProperty(value = "左眼位置:y"  ,dataType="Integer")
064    private Integer eyeLefty;
065
066    /** comments:右眼位置:x */
067    @ApiModelProperty(value = "右眼位置:x"  ,dataType="Integer")
068    private Integer eyeRightx;
069
070    /** comments:右眼位置:y */
071    @ApiModelProperty(value = "右眼位置:y"  ,dataType="Integer")
072    private Integer eyeRighty;
073
074    /** comments:嘴巴位置:x */
075    @ApiModelProperty(value = "嘴巴位置:x"  ,dataType="Integer")
076    private Integer mouthX;
077
078    /** comments:嘴巴位置:y */
079    @ApiModelProperty(value = "嘴巴位置:y"  ,dataType="Integer")
080    private Integer mouthY;
081
082    /** comments:鼻子位置:x */
083    @ApiModelProperty(value = "鼻子位置:x"  ,dataType="Integer")
084    private Integer noseX;
085
086    /** comments:鼻子位置:y */
087    @ApiModelProperty(value = "鼻子位置:y"  ,dataType="Integer")
088    private Integer noseY;
089
090    /** comments:人脸姿态:偏航角 */
091    @ApiModelProperty(value = "人脸姿态:偏航角"  ,dataType="Integer")
092    private Integer angleYaw;
093
094    /** comments:人脸姿态:俯仰角 */
095    @ApiModelProperty(value = "人脸姿态:俯仰角"  ,dataType="Integer")
096    private Integer anglePitch;
097
098    /** comments:人脸姿态:滚转角 */
099    @ApiModelProperty(value = "人脸姿态:滚转角"  ,dataType="Integer")
100    private Integer angleRoll;
101
102    /** comments:扩展字段,保存人脸检测基本信息之外的其他数据,内容由SDK负责解析 */
103    @ApiModelProperty(value = "扩展字段,保存人脸检测基本信息之外的其他数据,内容由SDK负责解析"  ,dataType="ByteBuffer")
104    private java.nio.ByteBuffer extInfo;
105
106    /** comments:外键,人脸特征数据MD5 id */
107    @ApiModelProperty(value = "外键,人脸特征数据MD5 id"  ,dataType="String")
108    private String featureMd5;
109
110    /** flag whether {@code this} can be modified */
111    private Boolean immutable;
112    /** columns modified flag */
113    @ApiModelProperty(value="columns modified flag",dataType="int",required=true)
114    private int modified;
115    /** columns initialized flag */
116    @ApiModelProperty(value="columns initialized flag",dataType="int",required=true)
117    private int initialized;
118    /** new record flag  */
119    @ApiModelProperty(value="new record flag",dataType="boolean",required=true)
120    private boolean isNew;        
121    /** 
122     * set immutable status
123     * @return {@code this} 
124     */
125    private FaceBean immutable(Boolean immutable) {
126        this.immutable = immutable;
127        return this;
128    }
129    /** 
130     * set {@code this} as immutable object
131     * @return {@code this} 
132     */
133    public FaceBean asImmutable() {
134        return immutable(Boolean.TRUE);
135    }
136    /**
137     * @return {@code true} if {@code this} is a mutable object  
138     */
139    public boolean mutable(){
140        return !Boolean.TRUE.equals(this.immutable);
141    }
142    /**
143     * @return {@code this}
144     * @throws IllegalStateException if {@code this} is a immutable object 
145     */
146    private FaceBean checkMutable(){
147        if(!mutable()){
148            throw new IllegalStateException("this is a immutable object");
149        }
150        return this;
151    }
152    /**
153     * @return return a new mutable copy of this object.
154     */
155    public FaceBean cloneMutable(){
156        return clone().immutable(null);
157    }
158    @ThriftField(value=1,name="_new",requiredness=Requiredness.REQUIRED)
159    @Override
160    public boolean isNew()
161    {
162        return this.isNew;
163    }
164
165
166    @Override
167    public void isNew(boolean isNew)
168    {
169        this.isNew = isNew;
170    }
171    /**
172     * Specifies to the object if it has been set as new.
173     *
174     * @param isNew the boolean value to be assigned to the isNew field
175     */
176    @ThriftField()
177    public void setNew(boolean isNew)
178    {
179        this.isNew = isNew;
180    }
181    /**
182     * @return the modified status of columns
183     */
184    @ThriftField(value=2,requiredness=Requiredness.REQUIRED)
185    public int getModified(){
186        return modified;
187    }
188
189    /**
190     * @param modified the modified status bit to be assigned to {@link #modified}
191     */
192    @ThriftField()
193    public void setModified(int modified){
194        this.modified = modified;
195    }
196    /**
197     * @return the initialized status of columns
198     */
199    @ThriftField(value=3,requiredness=Requiredness.REQUIRED)
200    public int getInitialized(){
201        return initialized;
202    }
203
204    /**
205     * @param initialized the initialized status bit to be assigned to {@link #initialized}
206     */
207    @ThriftField()
208    public void setInitialized(int initialized){
209        this.initialized = initialized;
210    }
211    protected static final <T extends Comparable<T>>boolean equals(T a, T b) {
212        return a == b || (a != null && 0==a.compareTo(b));
213    }
214    public FaceBean(){
215        super();
216        reset();
217    }
218    /**
219     * construct a new instance filled with primary keys
220     * @param id PK# 1 
221     */
222    public FaceBean(Integer id){
223        this();
224        setId(id);
225    }
226    /**
227     * Getter method for {@link #id}.<br>
228     * PRIMARY KEY.<br>
229     * Meta Data Information (in progress):
230     * <ul>
231     * <li>full name: fl_face.id</li>
232     * <li> imported key: fl_log.compare_face</li>
233     * <li>comments: 主键</li>
234     * <li>AUTO_INCREMENT</li>
235     * <li>NOT NULL</li>
236     * <li>column size: 10</li>
237     * <li>JDBC type returned by the driver: Types.INTEGER</li>
238     * </ul>
239     *
240     * @return the value of id
241     */
242    @ThriftField(value=4)
243    public Integer getId(){
244        return id;
245    }
246    /**
247     * Setter method for {@link #id}.<br>
248     * The new value is set only if equals() says it is different,
249     * or if one of either the new value or the current value is null.
250     * In case the new value is different, it is set and the field is marked as 'modified'.
251     *
252     * @param newVal the new value to be assigned to id
253     */
254    public void setId(Integer newVal)
255    {
256        checkMutable();
257
258        modified |= FL_FACE_ID_ID_MASK;
259        initialized |= FL_FACE_ID_ID_MASK;
260
261        if (Objects.equals(newVal, id)) {
262            return;
263        }
264        id = newVal;
265    }
266    /** 
267     * setter for thrift:swift support<br>
268     * without modification for {@link #modified} and {@link #initialized}<br>
269     * <b>NOTE:</b>DO NOT use the method in your code
270     */
271    @ThriftField(name = "id")
272    public void writeId(Integer newVal){
273        checkMutable();
274        id = newVal;
275    }
276    /**
277     * Setter method for {@link #id}.<br>
278     * Convenient for those who do not want to deal with Objects for primary types.
279     *
280     * @param newVal the new value to be assigned to id
281     */
282    public void setId(int newVal)
283    {
284        setId(new Integer(newVal));
285    }
286    /**
287     * Determines if the id has been modified.
288     *
289     * @return true if the field has been modified, false if the field has not been modified
290     */
291    public boolean checkIdModified()
292    {
293        return 0L !=  (modified & FL_FACE_ID_ID_MASK);
294    }
295
296    /**
297     * Determines if the id has been initialized.<br>
298     *
299     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
300     *
301     * @return true if the field has been initialized, false otherwise
302     */
303    public boolean checkIdInitialized()
304    {
305        return 0L !=  (initialized & FL_FACE_ID_ID_MASK);
306    }
307    /**
308     * Getter method for {@link #imageMd5}.<br>
309     * Meta Data Information (in progress):
310     * <ul>
311     * <li>full name: fl_face.image_md5</li>
312     * <li> foreign key: fl_image.md5</li>
313     * <li>comments: 外键,所属图像id</li>
314     * <li>NOT NULL</li>
315     * <li>column size: 32</li>
316     * <li>JDBC type returned by the driver: Types.CHAR</li>
317     * </ul>
318     *
319     * @return the value of imageMd5
320     */
321    @ThriftField(value=5)
322    public String getImageMd5(){
323        return imageMd5;
324    }
325    /**
326     * Setter method for {@link #imageMd5}.<br>
327     * The new value is set only if equals() says it is different,
328     * or if one of either the new value or the current value is null.
329     * In case the new value is different, it is set and the field is marked as 'modified'.
330     *
331     * @param newVal the new value( NOT NULL) to be assigned to imageMd5
332     */
333    public void setImageMd5(String newVal)
334    {
335        checkMutable();
336
337        modified |= FL_FACE_ID_IMAGE_MD5_MASK;
338        initialized |= FL_FACE_ID_IMAGE_MD5_MASK;
339
340        if (Objects.equals(newVal, imageMd5)) {
341            return;
342        }
343        imageMd5 = newVal;
344    }
345    /** 
346     * setter for thrift:swift support<br>
347     * without modification for {@link #modified} and {@link #initialized}<br>
348     * <b>NOTE:</b>DO NOT use the method in your code
349     */
350    @ThriftField(name = "imageMd5")
351    public void writeImageMd5(String newVal){
352        checkMutable();
353        imageMd5 = newVal;
354    }
355    /**
356     * Determines if the imageMd5 has been modified.
357     *
358     * @return true if the field has been modified, false if the field has not been modified
359     */
360    public boolean checkImageMd5Modified()
361    {
362        return 0L !=  (modified & FL_FACE_ID_IMAGE_MD5_MASK);
363    }
364
365    /**
366     * Determines if the imageMd5 has been initialized.<br>
367     *
368     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
369     *
370     * @return true if the field has been initialized, false otherwise
371     */
372    public boolean checkImageMd5Initialized()
373    {
374        return 0L !=  (initialized & FL_FACE_ID_IMAGE_MD5_MASK);
375    }
376    /**
377     * Getter method for {@link #faceLeft}.<br>
378     * Meta Data Information (in progress):
379     * <ul>
380     * <li>full name: fl_face.face_left</li>
381     * <li>comments: 人脸位置矩形:x</li>
382     * <li>NOT NULL</li>
383     * <li>column size: 10</li>
384     * <li>JDBC type returned by the driver: Types.INTEGER</li>
385     * </ul>
386     *
387     * @return the value of faceLeft
388     */
389    @ThriftField(value=6)
390    public Integer getFaceLeft(){
391        return faceLeft;
392    }
393    /**
394     * Setter method for {@link #faceLeft}.<br>
395     * The new value is set only if equals() says it is different,
396     * or if one of either the new value or the current value is null.
397     * In case the new value is different, it is set and the field is marked as 'modified'.
398     *
399     * @param newVal the new value( NOT NULL) to be assigned to faceLeft
400     */
401    public void setFaceLeft(Integer newVal)
402    {
403        checkMutable();
404
405        modified |= FL_FACE_ID_FACE_LEFT_MASK;
406        initialized |= FL_FACE_ID_FACE_LEFT_MASK;
407
408        if (Objects.equals(newVal, faceLeft)) {
409            return;
410        }
411        faceLeft = newVal;
412    }
413    /** 
414     * setter for thrift:swift support<br>
415     * without modification for {@link #modified} and {@link #initialized}<br>
416     * <b>NOTE:</b>DO NOT use the method in your code
417     */
418    @ThriftField(name = "faceLeft")
419    public void writeFaceLeft(Integer newVal){
420        checkMutable();
421        faceLeft = newVal;
422    }
423    /**
424     * Setter method for {@link #faceLeft}.<br>
425     * Convenient for those who do not want to deal with Objects for primary types.
426     *
427     * @param newVal the new value to be assigned to faceLeft
428     */
429    public void setFaceLeft(int newVal)
430    {
431        setFaceLeft(new Integer(newVal));
432    }
433    /**
434     * Determines if the faceLeft has been modified.
435     *
436     * @return true if the field has been modified, false if the field has not been modified
437     */
438    public boolean checkFaceLeftModified()
439    {
440        return 0L !=  (modified & FL_FACE_ID_FACE_LEFT_MASK);
441    }
442
443    /**
444     * Determines if the faceLeft has been initialized.<br>
445     *
446     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
447     *
448     * @return true if the field has been initialized, false otherwise
449     */
450    public boolean checkFaceLeftInitialized()
451    {
452        return 0L !=  (initialized & FL_FACE_ID_FACE_LEFT_MASK);
453    }
454    /**
455     * Getter method for {@link #faceTop}.<br>
456     * Meta Data Information (in progress):
457     * <ul>
458     * <li>full name: fl_face.face_top</li>
459     * <li>comments: 人脸位置矩形:y</li>
460     * <li>NOT NULL</li>
461     * <li>column size: 10</li>
462     * <li>JDBC type returned by the driver: Types.INTEGER</li>
463     * </ul>
464     *
465     * @return the value of faceTop
466     */
467    @ThriftField(value=7)
468    public Integer getFaceTop(){
469        return faceTop;
470    }
471    /**
472     * Setter method for {@link #faceTop}.<br>
473     * The new value is set only if equals() says it is different,
474     * or if one of either the new value or the current value is null.
475     * In case the new value is different, it is set and the field is marked as 'modified'.
476     *
477     * @param newVal the new value( NOT NULL) to be assigned to faceTop
478     */
479    public void setFaceTop(Integer newVal)
480    {
481        checkMutable();
482
483        modified |= FL_FACE_ID_FACE_TOP_MASK;
484        initialized |= FL_FACE_ID_FACE_TOP_MASK;
485
486        if (Objects.equals(newVal, faceTop)) {
487            return;
488        }
489        faceTop = newVal;
490    }
491    /** 
492     * setter for thrift:swift support<br>
493     * without modification for {@link #modified} and {@link #initialized}<br>
494     * <b>NOTE:</b>DO NOT use the method in your code
495     */
496    @ThriftField(name = "faceTop")
497    public void writeFaceTop(Integer newVal){
498        checkMutable();
499        faceTop = newVal;
500    }
501    /**
502     * Setter method for {@link #faceTop}.<br>
503     * Convenient for those who do not want to deal with Objects for primary types.
504     *
505     * @param newVal the new value to be assigned to faceTop
506     */
507    public void setFaceTop(int newVal)
508    {
509        setFaceTop(new Integer(newVal));
510    }
511    /**
512     * Determines if the faceTop has been modified.
513     *
514     * @return true if the field has been modified, false if the field has not been modified
515     */
516    public boolean checkFaceTopModified()
517    {
518        return 0L !=  (modified & FL_FACE_ID_FACE_TOP_MASK);
519    }
520
521    /**
522     * Determines if the faceTop has been initialized.<br>
523     *
524     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
525     *
526     * @return true if the field has been initialized, false otherwise
527     */
528    public boolean checkFaceTopInitialized()
529    {
530        return 0L !=  (initialized & FL_FACE_ID_FACE_TOP_MASK);
531    }
532    /**
533     * Getter method for {@link #faceWidth}.<br>
534     * Meta Data Information (in progress):
535     * <ul>
536     * <li>full name: fl_face.face_width</li>
537     * <li>comments: 人脸位置矩形:width</li>
538     * <li>NOT NULL</li>
539     * <li>column size: 10</li>
540     * <li>JDBC type returned by the driver: Types.INTEGER</li>
541     * </ul>
542     *
543     * @return the value of faceWidth
544     */
545    @ThriftField(value=8)
546    public Integer getFaceWidth(){
547        return faceWidth;
548    }
549    /**
550     * Setter method for {@link #faceWidth}.<br>
551     * The new value is set only if equals() says it is different,
552     * or if one of either the new value or the current value is null.
553     * In case the new value is different, it is set and the field is marked as 'modified'.
554     *
555     * @param newVal the new value( NOT NULL) to be assigned to faceWidth
556     */
557    public void setFaceWidth(Integer newVal)
558    {
559        checkMutable();
560
561        modified |= FL_FACE_ID_FACE_WIDTH_MASK;
562        initialized |= FL_FACE_ID_FACE_WIDTH_MASK;
563
564        if (Objects.equals(newVal, faceWidth)) {
565            return;
566        }
567        faceWidth = newVal;
568    }
569    /** 
570     * setter for thrift:swift support<br>
571     * without modification for {@link #modified} and {@link #initialized}<br>
572     * <b>NOTE:</b>DO NOT use the method in your code
573     */
574    @ThriftField(name = "faceWidth")
575    public void writeFaceWidth(Integer newVal){
576        checkMutable();
577        faceWidth = newVal;
578    }
579    /**
580     * Setter method for {@link #faceWidth}.<br>
581     * Convenient for those who do not want to deal with Objects for primary types.
582     *
583     * @param newVal the new value to be assigned to faceWidth
584     */
585    public void setFaceWidth(int newVal)
586    {
587        setFaceWidth(new Integer(newVal));
588    }
589    /**
590     * Determines if the faceWidth has been modified.
591     *
592     * @return true if the field has been modified, false if the field has not been modified
593     */
594    public boolean checkFaceWidthModified()
595    {
596        return 0L !=  (modified & FL_FACE_ID_FACE_WIDTH_MASK);
597    }
598
599    /**
600     * Determines if the faceWidth has been initialized.<br>
601     *
602     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
603     *
604     * @return true if the field has been initialized, false otherwise
605     */
606    public boolean checkFaceWidthInitialized()
607    {
608        return 0L !=  (initialized & FL_FACE_ID_FACE_WIDTH_MASK);
609    }
610    /**
611     * Getter method for {@link #faceHeight}.<br>
612     * Meta Data Information (in progress):
613     * <ul>
614     * <li>full name: fl_face.face_height</li>
615     * <li>comments: 人脸位置矩形:height</li>
616     * <li>NOT NULL</li>
617     * <li>column size: 10</li>
618     * <li>JDBC type returned by the driver: Types.INTEGER</li>
619     * </ul>
620     *
621     * @return the value of faceHeight
622     */
623    @ThriftField(value=9)
624    public Integer getFaceHeight(){
625        return faceHeight;
626    }
627    /**
628     * Setter method for {@link #faceHeight}.<br>
629     * The new value is set only if equals() says it is different,
630     * or if one of either the new value or the current value is null.
631     * In case the new value is different, it is set and the field is marked as 'modified'.
632     *
633     * @param newVal the new value( NOT NULL) to be assigned to faceHeight
634     */
635    public void setFaceHeight(Integer newVal)
636    {
637        checkMutable();
638
639        modified |= FL_FACE_ID_FACE_HEIGHT_MASK;
640        initialized |= FL_FACE_ID_FACE_HEIGHT_MASK;
641
642        if (Objects.equals(newVal, faceHeight)) {
643            return;
644        }
645        faceHeight = newVal;
646    }
647    /** 
648     * setter for thrift:swift support<br>
649     * without modification for {@link #modified} and {@link #initialized}<br>
650     * <b>NOTE:</b>DO NOT use the method in your code
651     */
652    @ThriftField(name = "faceHeight")
653    public void writeFaceHeight(Integer newVal){
654        checkMutable();
655        faceHeight = newVal;
656    }
657    /**
658     * Setter method for {@link #faceHeight}.<br>
659     * Convenient for those who do not want to deal with Objects for primary types.
660     *
661     * @param newVal the new value to be assigned to faceHeight
662     */
663    public void setFaceHeight(int newVal)
664    {
665        setFaceHeight(new Integer(newVal));
666    }
667    /**
668     * Determines if the faceHeight has been modified.
669     *
670     * @return true if the field has been modified, false if the field has not been modified
671     */
672    public boolean checkFaceHeightModified()
673    {
674        return 0L !=  (modified & FL_FACE_ID_FACE_HEIGHT_MASK);
675    }
676
677    /**
678     * Determines if the faceHeight has been initialized.<br>
679     *
680     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
681     *
682     * @return true if the field has been initialized, false otherwise
683     */
684    public boolean checkFaceHeightInitialized()
685    {
686        return 0L !=  (initialized & FL_FACE_ID_FACE_HEIGHT_MASK);
687    }
688    /**
689     * Getter method for {@link #eyeLeftx}.<br>
690     * Meta Data Information (in progress):
691     * <ul>
692     * <li>full name: fl_face.eye_leftx</li>
693     * <li>comments: 左眼位置:x</li>
694     * <li>column size: 10</li>
695     * <li>JDBC type returned by the driver: Types.INTEGER</li>
696     * </ul>
697     *
698     * @return the value of eyeLeftx
699     */
700    @ThriftField(value=10)
701    public Integer getEyeLeftx(){
702        return eyeLeftx;
703    }
704    /**
705     * Setter method for {@link #eyeLeftx}.<br>
706     * The new value is set only if equals() says it is different,
707     * or if one of either the new value or the current value is null.
708     * In case the new value is different, it is set and the field is marked as 'modified'.
709     *
710     * @param newVal the new value to be assigned to eyeLeftx
711     */
712    public void setEyeLeftx(Integer newVal)
713    {
714        checkMutable();
715
716        modified |= FL_FACE_ID_EYE_LEFTX_MASK;
717        initialized |= FL_FACE_ID_EYE_LEFTX_MASK;
718
719        if (Objects.equals(newVal, eyeLeftx)) {
720            return;
721        }
722        eyeLeftx = newVal;
723    }
724    /** 
725     * setter for thrift:swift support<br>
726     * without modification for {@link #modified} and {@link #initialized}<br>
727     * <b>NOTE:</b>DO NOT use the method in your code
728     */
729    @ThriftField(name = "eyeLeftx")
730    public void writeEyeLeftx(Integer newVal){
731        checkMutable();
732        eyeLeftx = newVal;
733    }
734    /**
735     * Setter method for {@link #eyeLeftx}.<br>
736     * Convenient for those who do not want to deal with Objects for primary types.
737     *
738     * @param newVal the new value to be assigned to eyeLeftx
739     */
740    public void setEyeLeftx(int newVal)
741    {
742        setEyeLeftx(new Integer(newVal));
743    }
744    /**
745     * Determines if the eyeLeftx has been modified.
746     *
747     * @return true if the field has been modified, false if the field has not been modified
748     */
749    public boolean checkEyeLeftxModified()
750    {
751        return 0L !=  (modified & FL_FACE_ID_EYE_LEFTX_MASK);
752    }
753
754    /**
755     * Determines if the eyeLeftx has been initialized.<br>
756     *
757     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
758     *
759     * @return true if the field has been initialized, false otherwise
760     */
761    public boolean checkEyeLeftxInitialized()
762    {
763        return 0L !=  (initialized & FL_FACE_ID_EYE_LEFTX_MASK);
764    }
765    /**
766     * Getter method for {@link #eyeLefty}.<br>
767     * Meta Data Information (in progress):
768     * <ul>
769     * <li>full name: fl_face.eye_lefty</li>
770     * <li>comments: 左眼位置:y</li>
771     * <li>column size: 10</li>
772     * <li>JDBC type returned by the driver: Types.INTEGER</li>
773     * </ul>
774     *
775     * @return the value of eyeLefty
776     */
777    @ThriftField(value=11)
778    public Integer getEyeLefty(){
779        return eyeLefty;
780    }
781    /**
782     * Setter method for {@link #eyeLefty}.<br>
783     * The new value is set only if equals() says it is different,
784     * or if one of either the new value or the current value is null.
785     * In case the new value is different, it is set and the field is marked as 'modified'.
786     *
787     * @param newVal the new value to be assigned to eyeLefty
788     */
789    public void setEyeLefty(Integer newVal)
790    {
791        checkMutable();
792
793        modified |= FL_FACE_ID_EYE_LEFTY_MASK;
794        initialized |= FL_FACE_ID_EYE_LEFTY_MASK;
795
796        if (Objects.equals(newVal, eyeLefty)) {
797            return;
798        }
799        eyeLefty = newVal;
800    }
801    /** 
802     * setter for thrift:swift support<br>
803     * without modification for {@link #modified} and {@link #initialized}<br>
804     * <b>NOTE:</b>DO NOT use the method in your code
805     */
806    @ThriftField(name = "eyeLefty")
807    public void writeEyeLefty(Integer newVal){
808        checkMutable();
809        eyeLefty = newVal;
810    }
811    /**
812     * Setter method for {@link #eyeLefty}.<br>
813     * Convenient for those who do not want to deal with Objects for primary types.
814     *
815     * @param newVal the new value to be assigned to eyeLefty
816     */
817    public void setEyeLefty(int newVal)
818    {
819        setEyeLefty(new Integer(newVal));
820    }
821    /**
822     * Determines if the eyeLefty has been modified.
823     *
824     * @return true if the field has been modified, false if the field has not been modified
825     */
826    public boolean checkEyeLeftyModified()
827    {
828        return 0L !=  (modified & FL_FACE_ID_EYE_LEFTY_MASK);
829    }
830
831    /**
832     * Determines if the eyeLefty has been initialized.<br>
833     *
834     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
835     *
836     * @return true if the field has been initialized, false otherwise
837     */
838    public boolean checkEyeLeftyInitialized()
839    {
840        return 0L !=  (initialized & FL_FACE_ID_EYE_LEFTY_MASK);
841    }
842    /**
843     * Getter method for {@link #eyeRightx}.<br>
844     * Meta Data Information (in progress):
845     * <ul>
846     * <li>full name: fl_face.eye_rightx</li>
847     * <li>comments: 右眼位置:x</li>
848     * <li>column size: 10</li>
849     * <li>JDBC type returned by the driver: Types.INTEGER</li>
850     * </ul>
851     *
852     * @return the value of eyeRightx
853     */
854    @ThriftField(value=12)
855    public Integer getEyeRightx(){
856        return eyeRightx;
857    }
858    /**
859     * Setter method for {@link #eyeRightx}.<br>
860     * The new value is set only if equals() says it is different,
861     * or if one of either the new value or the current value is null.
862     * In case the new value is different, it is set and the field is marked as 'modified'.
863     *
864     * @param newVal the new value to be assigned to eyeRightx
865     */
866    public void setEyeRightx(Integer newVal)
867    {
868        checkMutable();
869
870        modified |= FL_FACE_ID_EYE_RIGHTX_MASK;
871        initialized |= FL_FACE_ID_EYE_RIGHTX_MASK;
872
873        if (Objects.equals(newVal, eyeRightx)) {
874            return;
875        }
876        eyeRightx = newVal;
877    }
878    /** 
879     * setter for thrift:swift support<br>
880     * without modification for {@link #modified} and {@link #initialized}<br>
881     * <b>NOTE:</b>DO NOT use the method in your code
882     */
883    @ThriftField(name = "eyeRightx")
884    public void writeEyeRightx(Integer newVal){
885        checkMutable();
886        eyeRightx = newVal;
887    }
888    /**
889     * Setter method for {@link #eyeRightx}.<br>
890     * Convenient for those who do not want to deal with Objects for primary types.
891     *
892     * @param newVal the new value to be assigned to eyeRightx
893     */
894    public void setEyeRightx(int newVal)
895    {
896        setEyeRightx(new Integer(newVal));
897    }
898    /**
899     * Determines if the eyeRightx has been modified.
900     *
901     * @return true if the field has been modified, false if the field has not been modified
902     */
903    public boolean checkEyeRightxModified()
904    {
905        return 0L !=  (modified & FL_FACE_ID_EYE_RIGHTX_MASK);
906    }
907
908    /**
909     * Determines if the eyeRightx has been initialized.<br>
910     *
911     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
912     *
913     * @return true if the field has been initialized, false otherwise
914     */
915    public boolean checkEyeRightxInitialized()
916    {
917        return 0L !=  (initialized & FL_FACE_ID_EYE_RIGHTX_MASK);
918    }
919    /**
920     * Getter method for {@link #eyeRighty}.<br>
921     * Meta Data Information (in progress):
922     * <ul>
923     * <li>full name: fl_face.eye_righty</li>
924     * <li>comments: 右眼位置:y</li>
925     * <li>column size: 10</li>
926     * <li>JDBC type returned by the driver: Types.INTEGER</li>
927     * </ul>
928     *
929     * @return the value of eyeRighty
930     */
931    @ThriftField(value=13)
932    public Integer getEyeRighty(){
933        return eyeRighty;
934    }
935    /**
936     * Setter method for {@link #eyeRighty}.<br>
937     * The new value is set only if equals() says it is different,
938     * or if one of either the new value or the current value is null.
939     * In case the new value is different, it is set and the field is marked as 'modified'.
940     *
941     * @param newVal the new value to be assigned to eyeRighty
942     */
943    public void setEyeRighty(Integer newVal)
944    {
945        checkMutable();
946
947        modified |= FL_FACE_ID_EYE_RIGHTY_MASK;
948        initialized |= FL_FACE_ID_EYE_RIGHTY_MASK;
949
950        if (Objects.equals(newVal, eyeRighty)) {
951            return;
952        }
953        eyeRighty = newVal;
954    }
955    /** 
956     * setter for thrift:swift support<br>
957     * without modification for {@link #modified} and {@link #initialized}<br>
958     * <b>NOTE:</b>DO NOT use the method in your code
959     */
960    @ThriftField(name = "eyeRighty")
961    public void writeEyeRighty(Integer newVal){
962        checkMutable();
963        eyeRighty = newVal;
964    }
965    /**
966     * Setter method for {@link #eyeRighty}.<br>
967     * Convenient for those who do not want to deal with Objects for primary types.
968     *
969     * @param newVal the new value to be assigned to eyeRighty
970     */
971    public void setEyeRighty(int newVal)
972    {
973        setEyeRighty(new Integer(newVal));
974    }
975    /**
976     * Determines if the eyeRighty has been modified.
977     *
978     * @return true if the field has been modified, false if the field has not been modified
979     */
980    public boolean checkEyeRightyModified()
981    {
982        return 0L !=  (modified & FL_FACE_ID_EYE_RIGHTY_MASK);
983    }
984
985    /**
986     * Determines if the eyeRighty has been initialized.<br>
987     *
988     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
989     *
990     * @return true if the field has been initialized, false otherwise
991     */
992    public boolean checkEyeRightyInitialized()
993    {
994        return 0L !=  (initialized & FL_FACE_ID_EYE_RIGHTY_MASK);
995    }
996    /**
997     * Getter method for {@link #mouthX}.<br>
998     * Meta Data Information (in progress):
999     * <ul>
1000     * <li>full name: fl_face.mouth_x</li>
1001     * <li>comments: 嘴巴位置:x</li>
1002     * <li>column size: 10</li>
1003     * <li>JDBC type returned by the driver: Types.INTEGER</li>
1004     * </ul>
1005     *
1006     * @return the value of mouthX
1007     */
1008    @ThriftField(value=14)
1009    public Integer getMouthX(){
1010        return mouthX;
1011    }
1012    /**
1013     * Setter method for {@link #mouthX}.<br>
1014     * The new value is set only if equals() says it is different,
1015     * or if one of either the new value or the current value is null.
1016     * In case the new value is different, it is set and the field is marked as 'modified'.
1017     *
1018     * @param newVal the new value to be assigned to mouthX
1019     */
1020    public void setMouthX(Integer newVal)
1021    {
1022        checkMutable();
1023
1024        modified |= FL_FACE_ID_MOUTH_X_MASK;
1025        initialized |= FL_FACE_ID_MOUTH_X_MASK;
1026
1027        if (Objects.equals(newVal, mouthX)) {
1028            return;
1029        }
1030        mouthX = newVal;
1031    }
1032    /** 
1033     * setter for thrift:swift support<br>
1034     * without modification for {@link #modified} and {@link #initialized}<br>
1035     * <b>NOTE:</b>DO NOT use the method in your code
1036     */
1037    @ThriftField(name = "mouthX")
1038    public void writeMouthX(Integer newVal){
1039        checkMutable();
1040        mouthX = newVal;
1041    }
1042    /**
1043     * Setter method for {@link #mouthX}.<br>
1044     * Convenient for those who do not want to deal with Objects for primary types.
1045     *
1046     * @param newVal the new value to be assigned to mouthX
1047     */
1048    public void setMouthX(int newVal)
1049    {
1050        setMouthX(new Integer(newVal));
1051    }
1052    /**
1053     * Determines if the mouthX has been modified.
1054     *
1055     * @return true if the field has been modified, false if the field has not been modified
1056     */
1057    public boolean checkMouthXModified()
1058    {
1059        return 0L !=  (modified & FL_FACE_ID_MOUTH_X_MASK);
1060    }
1061
1062    /**
1063     * Determines if the mouthX has been initialized.<br>
1064     *
1065     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
1066     *
1067     * @return true if the field has been initialized, false otherwise
1068     */
1069    public boolean checkMouthXInitialized()
1070    {
1071        return 0L !=  (initialized & FL_FACE_ID_MOUTH_X_MASK);
1072    }
1073    /**
1074     * Getter method for {@link #mouthY}.<br>
1075     * Meta Data Information (in progress):
1076     * <ul>
1077     * <li>full name: fl_face.mouth_y</li>
1078     * <li>comments: 嘴巴位置:y</li>
1079     * <li>column size: 10</li>
1080     * <li>JDBC type returned by the driver: Types.INTEGER</li>
1081     * </ul>
1082     *
1083     * @return the value of mouthY
1084     */
1085    @ThriftField(value=15)
1086    public Integer getMouthY(){
1087        return mouthY;
1088    }
1089    /**
1090     * Setter method for {@link #mouthY}.<br>
1091     * The new value is set only if equals() says it is different,
1092     * or if one of either the new value or the current value is null.
1093     * In case the new value is different, it is set and the field is marked as 'modified'.
1094     *
1095     * @param newVal the new value to be assigned to mouthY
1096     */
1097    public void setMouthY(Integer newVal)
1098    {
1099        checkMutable();
1100
1101        modified |= FL_FACE_ID_MOUTH_Y_MASK;
1102        initialized |= FL_FACE_ID_MOUTH_Y_MASK;
1103
1104        if (Objects.equals(newVal, mouthY)) {
1105            return;
1106        }
1107        mouthY = newVal;
1108    }
1109    /** 
1110     * setter for thrift:swift support<br>
1111     * without modification for {@link #modified} and {@link #initialized}<br>
1112     * <b>NOTE:</b>DO NOT use the method in your code
1113     */
1114    @ThriftField(name = "mouthY")
1115    public void writeMouthY(Integer newVal){
1116        checkMutable();
1117        mouthY = newVal;
1118    }
1119    /**
1120     * Setter method for {@link #mouthY}.<br>
1121     * Convenient for those who do not want to deal with Objects for primary types.
1122     *
1123     * @param newVal the new value to be assigned to mouthY
1124     */
1125    public void setMouthY(int newVal)
1126    {
1127        setMouthY(new Integer(newVal));
1128    }
1129    /**
1130     * Determines if the mouthY has been modified.
1131     *
1132     * @return true if the field has been modified, false if the field has not been modified
1133     */
1134    public boolean checkMouthYModified()
1135    {
1136        return 0L !=  (modified & FL_FACE_ID_MOUTH_Y_MASK);
1137    }
1138
1139    /**
1140     * Determines if the mouthY has been initialized.<br>
1141     *
1142     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
1143     *
1144     * @return true if the field has been initialized, false otherwise
1145     */
1146    public boolean checkMouthYInitialized()
1147    {
1148        return 0L !=  (initialized & FL_FACE_ID_MOUTH_Y_MASK);
1149    }
1150    /**
1151     * Getter method for {@link #noseX}.<br>
1152     * Meta Data Information (in progress):
1153     * <ul>
1154     * <li>full name: fl_face.nose_x</li>
1155     * <li>comments: 鼻子位置:x</li>
1156     * <li>column size: 10</li>
1157     * <li>JDBC type returned by the driver: Types.INTEGER</li>
1158     * </ul>
1159     *
1160     * @return the value of noseX
1161     */
1162    @ThriftField(value=16)
1163    public Integer getNoseX(){
1164        return noseX;
1165    }
1166    /**
1167     * Setter method for {@link #noseX}.<br>
1168     * The new value is set only if equals() says it is different,
1169     * or if one of either the new value or the current value is null.
1170     * In case the new value is different, it is set and the field is marked as 'modified'.
1171     *
1172     * @param newVal the new value to be assigned to noseX
1173     */
1174    public void setNoseX(Integer newVal)
1175    {
1176        checkMutable();
1177
1178        modified |= FL_FACE_ID_NOSE_X_MASK;
1179        initialized |= FL_FACE_ID_NOSE_X_MASK;
1180
1181        if (Objects.equals(newVal, noseX)) {
1182            return;
1183        }
1184        noseX = newVal;
1185    }
1186    /** 
1187     * setter for thrift:swift support<br>
1188     * without modification for {@link #modified} and {@link #initialized}<br>
1189     * <b>NOTE:</b>DO NOT use the method in your code
1190     */
1191    @ThriftField(name = "noseX")
1192    public void writeNoseX(Integer newVal){
1193        checkMutable();
1194        noseX = newVal;
1195    }
1196    /**
1197     * Setter method for {@link #noseX}.<br>
1198     * Convenient for those who do not want to deal with Objects for primary types.
1199     *
1200     * @param newVal the new value to be assigned to noseX
1201     */
1202    public void setNoseX(int newVal)
1203    {
1204        setNoseX(new Integer(newVal));
1205    }
1206    /**
1207     * Determines if the noseX has been modified.
1208     *
1209     * @return true if the field has been modified, false if the field has not been modified
1210     */
1211    public boolean checkNoseXModified()
1212    {
1213        return 0L !=  (modified & FL_FACE_ID_NOSE_X_MASK);
1214    }
1215
1216    /**
1217     * Determines if the noseX has been initialized.<br>
1218     *
1219     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
1220     *
1221     * @return true if the field has been initialized, false otherwise
1222     */
1223    public boolean checkNoseXInitialized()
1224    {
1225        return 0L !=  (initialized & FL_FACE_ID_NOSE_X_MASK);
1226    }
1227    /**
1228     * Getter method for {@link #noseY}.<br>
1229     * Meta Data Information (in progress):
1230     * <ul>
1231     * <li>full name: fl_face.nose_y</li>
1232     * <li>comments: 鼻子位置:y</li>
1233     * <li>column size: 10</li>
1234     * <li>JDBC type returned by the driver: Types.INTEGER</li>
1235     * </ul>
1236     *
1237     * @return the value of noseY
1238     */
1239    @ThriftField(value=17)
1240    public Integer getNoseY(){
1241        return noseY;
1242    }
1243    /**
1244     * Setter method for {@link #noseY}.<br>
1245     * The new value is set only if equals() says it is different,
1246     * or if one of either the new value or the current value is null.
1247     * In case the new value is different, it is set and the field is marked as 'modified'.
1248     *
1249     * @param newVal the new value to be assigned to noseY
1250     */
1251    public void setNoseY(Integer newVal)
1252    {
1253        checkMutable();
1254
1255        modified |= FL_FACE_ID_NOSE_Y_MASK;
1256        initialized |= FL_FACE_ID_NOSE_Y_MASK;
1257
1258        if (Objects.equals(newVal, noseY)) {
1259            return;
1260        }
1261        noseY = newVal;
1262    }
1263    /** 
1264     * setter for thrift:swift support<br>
1265     * without modification for {@link #modified} and {@link #initialized}<br>
1266     * <b>NOTE:</b>DO NOT use the method in your code
1267     */
1268    @ThriftField(name = "noseY")
1269    public void writeNoseY(Integer newVal){
1270        checkMutable();
1271        noseY = newVal;
1272    }
1273    /**
1274     * Setter method for {@link #noseY}.<br>
1275     * Convenient for those who do not want to deal with Objects for primary types.
1276     *
1277     * @param newVal the new value to be assigned to noseY
1278     */
1279    public void setNoseY(int newVal)
1280    {
1281        setNoseY(new Integer(newVal));
1282    }
1283    /**
1284     * Determines if the noseY has been modified.
1285     *
1286     * @return true if the field has been modified, false if the field has not been modified
1287     */
1288    public boolean checkNoseYModified()
1289    {
1290        return 0L !=  (modified & FL_FACE_ID_NOSE_Y_MASK);
1291    }
1292
1293    /**
1294     * Determines if the noseY has been initialized.<br>
1295     *
1296     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
1297     *
1298     * @return true if the field has been initialized, false otherwise
1299     */
1300    public boolean checkNoseYInitialized()
1301    {
1302        return 0L !=  (initialized & FL_FACE_ID_NOSE_Y_MASK);
1303    }
1304    /**
1305     * Getter method for {@link #angleYaw}.<br>
1306     * Meta Data Information (in progress):
1307     * <ul>
1308     * <li>full name: fl_face.angle_yaw</li>
1309     * <li>comments: 人脸姿态:偏航角</li>
1310     * <li>column size: 10</li>
1311     * <li>JDBC type returned by the driver: Types.INTEGER</li>
1312     * </ul>
1313     *
1314     * @return the value of angleYaw
1315     */
1316    @ThriftField(value=18)
1317    public Integer getAngleYaw(){
1318        return angleYaw;
1319    }
1320    /**
1321     * Setter method for {@link #angleYaw}.<br>
1322     * The new value is set only if equals() says it is different,
1323     * or if one of either the new value or the current value is null.
1324     * In case the new value is different, it is set and the field is marked as 'modified'.
1325     *
1326     * @param newVal the new value to be assigned to angleYaw
1327     */
1328    public void setAngleYaw(Integer newVal)
1329    {
1330        checkMutable();
1331
1332        modified |= FL_FACE_ID_ANGLE_YAW_MASK;
1333        initialized |= FL_FACE_ID_ANGLE_YAW_MASK;
1334
1335        if (Objects.equals(newVal, angleYaw)) {
1336            return;
1337        }
1338        angleYaw = newVal;
1339    }
1340    /** 
1341     * setter for thrift:swift support<br>
1342     * without modification for {@link #modified} and {@link #initialized}<br>
1343     * <b>NOTE:</b>DO NOT use the method in your code
1344     */
1345    @ThriftField(name = "angleYaw")
1346    public void writeAngleYaw(Integer newVal){
1347        checkMutable();
1348        angleYaw = newVal;
1349    }
1350    /**
1351     * Setter method for {@link #angleYaw}.<br>
1352     * Convenient for those who do not want to deal with Objects for primary types.
1353     *
1354     * @param newVal the new value to be assigned to angleYaw
1355     */
1356    public void setAngleYaw(int newVal)
1357    {
1358        setAngleYaw(new Integer(newVal));
1359    }
1360    /**
1361     * Determines if the angleYaw has been modified.
1362     *
1363     * @return true if the field has been modified, false if the field has not been modified
1364     */
1365    public boolean checkAngleYawModified()
1366    {
1367        return 0L !=  (modified & FL_FACE_ID_ANGLE_YAW_MASK);
1368    }
1369
1370    /**
1371     * Determines if the angleYaw has been initialized.<br>
1372     *
1373     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
1374     *
1375     * @return true if the field has been initialized, false otherwise
1376     */
1377    public boolean checkAngleYawInitialized()
1378    {
1379        return 0L !=  (initialized & FL_FACE_ID_ANGLE_YAW_MASK);
1380    }
1381    /**
1382     * Getter method for {@link #anglePitch}.<br>
1383     * Meta Data Information (in progress):
1384     * <ul>
1385     * <li>full name: fl_face.angle_pitch</li>
1386     * <li>comments: 人脸姿态:俯仰角</li>
1387     * <li>column size: 10</li>
1388     * <li>JDBC type returned by the driver: Types.INTEGER</li>
1389     * </ul>
1390     *
1391     * @return the value of anglePitch
1392     */
1393    @ThriftField(value=19)
1394    public Integer getAnglePitch(){
1395        return anglePitch;
1396    }
1397    /**
1398     * Setter method for {@link #anglePitch}.<br>
1399     * The new value is set only if equals() says it is different,
1400     * or if one of either the new value or the current value is null.
1401     * In case the new value is different, it is set and the field is marked as 'modified'.
1402     *
1403     * @param newVal the new value to be assigned to anglePitch
1404     */
1405    public void setAnglePitch(Integer newVal)
1406    {
1407        checkMutable();
1408
1409        modified |= FL_FACE_ID_ANGLE_PITCH_MASK;
1410        initialized |= FL_FACE_ID_ANGLE_PITCH_MASK;
1411
1412        if (Objects.equals(newVal, anglePitch)) {
1413            return;
1414        }
1415        anglePitch = newVal;
1416    }
1417    /** 
1418     * setter for thrift:swift support<br>
1419     * without modification for {@link #modified} and {@link #initialized}<br>
1420     * <b>NOTE:</b>DO NOT use the method in your code
1421     */
1422    @ThriftField(name = "anglePitch")
1423    public void writeAnglePitch(Integer newVal){
1424        checkMutable();
1425        anglePitch = newVal;
1426    }
1427    /**
1428     * Setter method for {@link #anglePitch}.<br>
1429     * Convenient for those who do not want to deal with Objects for primary types.
1430     *
1431     * @param newVal the new value to be assigned to anglePitch
1432     */
1433    public void setAnglePitch(int newVal)
1434    {
1435        setAnglePitch(new Integer(newVal));
1436    }
1437    /**
1438     * Determines if the anglePitch has been modified.
1439     *
1440     * @return true if the field has been modified, false if the field has not been modified
1441     */
1442    public boolean checkAnglePitchModified()
1443    {
1444        return 0L !=  (modified & FL_FACE_ID_ANGLE_PITCH_MASK);
1445    }
1446
1447    /**
1448     * Determines if the anglePitch has been initialized.<br>
1449     *
1450     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
1451     *
1452     * @return true if the field has been initialized, false otherwise
1453     */
1454    public boolean checkAnglePitchInitialized()
1455    {
1456        return 0L !=  (initialized & FL_FACE_ID_ANGLE_PITCH_MASK);
1457    }
1458    /**
1459     * Getter method for {@link #angleRoll}.<br>
1460     * Meta Data Information (in progress):
1461     * <ul>
1462     * <li>full name: fl_face.angle_roll</li>
1463     * <li>comments: 人脸姿态:滚转角</li>
1464     * <li>column size: 10</li>
1465     * <li>JDBC type returned by the driver: Types.INTEGER</li>
1466     * </ul>
1467     *
1468     * @return the value of angleRoll
1469     */
1470    @ThriftField(value=20)
1471    public Integer getAngleRoll(){
1472        return angleRoll;
1473    }
1474    /**
1475     * Setter method for {@link #angleRoll}.<br>
1476     * The new value is set only if equals() says it is different,
1477     * or if one of either the new value or the current value is null.
1478     * In case the new value is different, it is set and the field is marked as 'modified'.
1479     *
1480     * @param newVal the new value to be assigned to angleRoll
1481     */
1482    public void setAngleRoll(Integer newVal)
1483    {
1484        checkMutable();
1485
1486        modified |= FL_FACE_ID_ANGLE_ROLL_MASK;
1487        initialized |= FL_FACE_ID_ANGLE_ROLL_MASK;
1488
1489        if (Objects.equals(newVal, angleRoll)) {
1490            return;
1491        }
1492        angleRoll = newVal;
1493    }
1494    /** 
1495     * setter for thrift:swift support<br>
1496     * without modification for {@link #modified} and {@link #initialized}<br>
1497     * <b>NOTE:</b>DO NOT use the method in your code
1498     */
1499    @ThriftField(name = "angleRoll")
1500    public void writeAngleRoll(Integer newVal){
1501        checkMutable();
1502        angleRoll = newVal;
1503    }
1504    /**
1505     * Setter method for {@link #angleRoll}.<br>
1506     * Convenient for those who do not want to deal with Objects for primary types.
1507     *
1508     * @param newVal the new value to be assigned to angleRoll
1509     */
1510    public void setAngleRoll(int newVal)
1511    {
1512        setAngleRoll(new Integer(newVal));
1513    }
1514    /**
1515     * Determines if the angleRoll has been modified.
1516     *
1517     * @return true if the field has been modified, false if the field has not been modified
1518     */
1519    public boolean checkAngleRollModified()
1520    {
1521        return 0L !=  (modified & FL_FACE_ID_ANGLE_ROLL_MASK);
1522    }
1523
1524    /**
1525     * Determines if the angleRoll has been initialized.<br>
1526     *
1527     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
1528     *
1529     * @return true if the field has been initialized, false otherwise
1530     */
1531    public boolean checkAngleRollInitialized()
1532    {
1533        return 0L !=  (initialized & FL_FACE_ID_ANGLE_ROLL_MASK);
1534    }
1535    /**
1536     * Getter method for {@link #extInfo}.<br>
1537     * Meta Data Information (in progress):
1538     * <ul>
1539     * <li>full name: fl_face.ext_info</li>
1540     * <li>comments: 扩展字段,保存人脸检测基本信息之外的其他数据,内容由SDK负责解析</li>
1541     * <li>column size: 65535</li>
1542     * <li>JDBC type returned by the driver: Types.LONGVARBINARY</li>
1543     * </ul>
1544     *
1545     * @return the value of extInfo
1546     */
1547    @ThriftField(value=21)
1548    public java.nio.ByteBuffer getExtInfo(){
1549        return extInfo;
1550    }
1551    /**
1552     * Setter method for {@link #extInfo}.<br>
1553     * The new value is set only if equals() says it is different,
1554     * or if one of either the new value or the current value is null.
1555     * In case the new value is different, it is set and the field is marked as 'modified'.
1556     *
1557     * @param newVal the new value to be assigned to extInfo
1558     */
1559    public void setExtInfo(java.nio.ByteBuffer newVal)
1560    {
1561        checkMutable();
1562
1563        modified |= FL_FACE_ID_EXT_INFO_MASK;
1564        initialized |= FL_FACE_ID_EXT_INFO_MASK;
1565
1566        if (Objects.equals(newVal, extInfo)) {
1567            return;
1568        }
1569        extInfo = newVal;
1570    }
1571    /** 
1572     * setter for thrift:swift support<br>
1573     * without modification for {@link #modified} and {@link #initialized}<br>
1574     * <b>NOTE:</b>DO NOT use the method in your code
1575     */
1576    @ThriftField(name = "extInfo")
1577    public void writeExtInfo(java.nio.ByteBuffer newVal){
1578        checkMutable();
1579        extInfo = newVal;
1580    }
1581    /**
1582     * Determines if the extInfo has been modified.
1583     *
1584     * @return true if the field has been modified, false if the field has not been modified
1585     */
1586    public boolean checkExtInfoModified()
1587    {
1588        return 0L !=  (modified & FL_FACE_ID_EXT_INFO_MASK);
1589    }
1590
1591    /**
1592     * Determines if the extInfo has been initialized.<br>
1593     *
1594     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
1595     *
1596     * @return true if the field has been initialized, false otherwise
1597     */
1598    public boolean checkExtInfoInitialized()
1599    {
1600        return 0L !=  (initialized & FL_FACE_ID_EXT_INFO_MASK);
1601    }
1602    /**
1603     * Getter method for {@link #featureMd5}.<br>
1604     * Meta Data Information (in progress):
1605     * <ul>
1606     * <li>full name: fl_face.feature_md5</li>
1607     * <li> foreign key: fl_feature.md5</li>
1608     * <li>comments: 外键,人脸特征数据MD5 id</li>
1609     * <li>column size: 32</li>
1610     * <li>JDBC type returned by the driver: Types.CHAR</li>
1611     * </ul>
1612     *
1613     * @return the value of featureMd5
1614     */
1615    @ThriftField(value=22)
1616    public String getFeatureMd5(){
1617        return featureMd5;
1618    }
1619    /**
1620     * Setter method for {@link #featureMd5}.<br>
1621     * The new value is set only if equals() says it is different,
1622     * or if one of either the new value or the current value is null.
1623     * In case the new value is different, it is set and the field is marked as 'modified'.
1624     *
1625     * @param newVal the new value to be assigned to featureMd5
1626     */
1627    public void setFeatureMd5(String newVal)
1628    {
1629        checkMutable();
1630
1631        modified |= FL_FACE_ID_FEATURE_MD5_MASK;
1632        initialized |= FL_FACE_ID_FEATURE_MD5_MASK;
1633
1634        if (Objects.equals(newVal, featureMd5)) {
1635            return;
1636        }
1637        featureMd5 = newVal;
1638    }
1639    /** 
1640     * setter for thrift:swift support<br>
1641     * without modification for {@link #modified} and {@link #initialized}<br>
1642     * <b>NOTE:</b>DO NOT use the method in your code
1643     */
1644    @ThriftField(name = "featureMd5")
1645    public void writeFeatureMd5(String newVal){
1646        checkMutable();
1647        featureMd5 = newVal;
1648    }
1649    /**
1650     * Determines if the featureMd5 has been modified.
1651     *
1652     * @return true if the field has been modified, false if the field has not been modified
1653     */
1654    public boolean checkFeatureMd5Modified()
1655    {
1656        return 0L !=  (modified & FL_FACE_ID_FEATURE_MD5_MASK);
1657    }
1658
1659    /**
1660     * Determines if the featureMd5 has been initialized.<br>
1661     *
1662     * It is useful to determine if a field is null on purpose or just because it has not been initialized.
1663     *
1664     * @return true if the field has been initialized, false otherwise
1665     */
1666    public boolean checkFeatureMd5Initialized()
1667    {
1668        return 0L !=  (initialized & FL_FACE_ID_FEATURE_MD5_MASK);
1669    }
1670    //////////////////////////////////////
1671    // referenced bean for FOREIGN KEYS
1672    //////////////////////////////////////
1673    /** 
1674     * The referenced {@link FeatureBean} by {@link #featureMd5} . <br>
1675     * FOREIGN KEY (feature_md5) REFERENCES fl_feature(md5)
1676     */
1677    @ApiModelProperty(hidden = true)
1678    private FeatureBean referencedByFeatureMd5;
1679    /**
1680     * Getter method for {@link #referencedByFeatureMd5}.
1681     * @return FeatureBean
1682     */
1683    public FeatureBean getReferencedByFeatureMd5() {
1684        return this.referencedByFeatureMd5;
1685    }
1686    /**
1687     * Setter method for {@link #referencedByFeatureMd5}.
1688     * @param reference FeatureBean
1689     */
1690    public void setReferencedByFeatureMd5(FeatureBean reference) {
1691        this.referencedByFeatureMd5 = reference;
1692    }
1693    /** 
1694     * The referenced {@link ImageBean} by {@link #imageMd5} . <br>
1695     * FOREIGN KEY (image_md5) REFERENCES fl_image(md5)
1696     */
1697    @ApiModelProperty(hidden = true)
1698    private ImageBean referencedByImageMd5;
1699    /**
1700     * Getter method for {@link #referencedByImageMd5}.
1701     * @return ImageBean
1702     */
1703    public ImageBean getReferencedByImageMd5() {
1704        return this.referencedByImageMd5;
1705    }
1706    /**
1707     * Setter method for {@link #referencedByImageMd5}.
1708     * @param reference ImageBean
1709     */
1710    public void setReferencedByImageMd5(ImageBean reference) {
1711        this.referencedByImageMd5 = reference;
1712    }
1713
1714    @Override
1715    public boolean isModified()
1716    {
1717        return 0 != modified;
1718    }
1719  
1720    @Override
1721    public boolean isModified(int columnID){
1722        switch ( columnID ){
1723        case FL_FACE_ID_ID:
1724            return checkIdModified();
1725        case FL_FACE_ID_IMAGE_MD5:
1726            return checkImageMd5Modified();
1727        case FL_FACE_ID_FACE_LEFT:
1728            return checkFaceLeftModified();
1729        case FL_FACE_ID_FACE_TOP:
1730            return checkFaceTopModified();
1731        case FL_FACE_ID_FACE_WIDTH:
1732            return checkFaceWidthModified();
1733        case FL_FACE_ID_FACE_HEIGHT:
1734            return checkFaceHeightModified();
1735        case FL_FACE_ID_EYE_LEFTX:
1736            return checkEyeLeftxModified();
1737        case FL_FACE_ID_EYE_LEFTY:
1738            return checkEyeLeftyModified();
1739        case FL_FACE_ID_EYE_RIGHTX:
1740            return checkEyeRightxModified();
1741        case FL_FACE_ID_EYE_RIGHTY:
1742            return checkEyeRightyModified();
1743        case FL_FACE_ID_MOUTH_X:
1744            return checkMouthXModified();
1745        case FL_FACE_ID_MOUTH_Y:
1746            return checkMouthYModified();
1747        case FL_FACE_ID_NOSE_X:
1748            return checkNoseXModified();
1749        case FL_FACE_ID_NOSE_Y:
1750            return checkNoseYModified();
1751        case FL_FACE_ID_ANGLE_YAW:
1752            return checkAngleYawModified();
1753        case FL_FACE_ID_ANGLE_PITCH:
1754            return checkAnglePitchModified();
1755        case FL_FACE_ID_ANGLE_ROLL:
1756            return checkAngleRollModified();
1757        case FL_FACE_ID_EXT_INFO:
1758            return checkExtInfoModified();
1759        case FL_FACE_ID_FEATURE_MD5:
1760            return checkFeatureMd5Modified();
1761        default:
1762            return false;
1763        }        
1764    }
1765
1766    @Override
1767    public boolean isInitialized(int columnID){
1768        switch(columnID) {
1769        case FL_FACE_ID_ID:
1770            return checkIdInitialized();
1771        case FL_FACE_ID_IMAGE_MD5:
1772            return checkImageMd5Initialized();
1773        case FL_FACE_ID_FACE_LEFT:
1774            return checkFaceLeftInitialized();
1775        case FL_FACE_ID_FACE_TOP:
1776            return checkFaceTopInitialized();
1777        case FL_FACE_ID_FACE_WIDTH:
1778            return checkFaceWidthInitialized();
1779        case FL_FACE_ID_FACE_HEIGHT:
1780            return checkFaceHeightInitialized();
1781        case FL_FACE_ID_EYE_LEFTX:
1782            return checkEyeLeftxInitialized();
1783        case FL_FACE_ID_EYE_LEFTY:
1784            return checkEyeLeftyInitialized();
1785        case FL_FACE_ID_EYE_RIGHTX:
1786            return checkEyeRightxInitialized();
1787        case FL_FACE_ID_EYE_RIGHTY:
1788            return checkEyeRightyInitialized();
1789        case FL_FACE_ID_MOUTH_X:
1790            return checkMouthXInitialized();
1791        case FL_FACE_ID_MOUTH_Y:
1792            return checkMouthYInitialized();
1793        case FL_FACE_ID_NOSE_X:
1794            return checkNoseXInitialized();
1795        case FL_FACE_ID_NOSE_Y:
1796            return checkNoseYInitialized();
1797        case FL_FACE_ID_ANGLE_YAW:
1798            return checkAngleYawInitialized();
1799        case FL_FACE_ID_ANGLE_PITCH:
1800            return checkAnglePitchInitialized();
1801        case FL_FACE_ID_ANGLE_ROLL:
1802            return checkAngleRollInitialized();
1803        case FL_FACE_ID_EXT_INFO:
1804            return checkExtInfoInitialized();
1805        case FL_FACE_ID_FEATURE_MD5:
1806            return checkFeatureMd5Initialized();
1807        default:
1808            return false;
1809        }
1810    }
1811    
1812    @Override
1813    public boolean isModified(String column){        
1814        return isModified(columnIDOf(column));
1815    }
1816
1817    @Override
1818    public boolean isInitialized(String column){
1819        return isInitialized(columnIDOf(column));
1820    }
1821    
1822    @Override
1823    public void resetIsModified()
1824    {
1825        checkMutable();
1826        modified = 0;
1827    }
1828
1829    @Override
1830    public void resetPrimaryKeysModified()
1831    {
1832        modified &= (~(FL_FACE_ID_ID_MASK));
1833    }
1834    /**
1835     * Resets columns modification status except primary keys to 'not modified'.
1836     */
1837    public void resetModifiedExceptPrimaryKeys()
1838    {
1839        modified &= (~(FL_FACE_ID_IMAGE_MD5_MASK |
1840            FL_FACE_ID_FACE_LEFT_MASK |
1841            FL_FACE_ID_FACE_TOP_MASK |
1842            FL_FACE_ID_FACE_WIDTH_MASK |
1843            FL_FACE_ID_FACE_HEIGHT_MASK |
1844            FL_FACE_ID_EYE_LEFTX_MASK |
1845            FL_FACE_ID_EYE_LEFTY_MASK |
1846            FL_FACE_ID_EYE_RIGHTX_MASK |
1847            FL_FACE_ID_EYE_RIGHTY_MASK |
1848            FL_FACE_ID_MOUTH_X_MASK |
1849            FL_FACE_ID_MOUTH_Y_MASK |
1850            FL_FACE_ID_NOSE_X_MASK |
1851            FL_FACE_ID_NOSE_Y_MASK |
1852            FL_FACE_ID_ANGLE_YAW_MASK |
1853            FL_FACE_ID_ANGLE_PITCH_MASK |
1854            FL_FACE_ID_ANGLE_ROLL_MASK |
1855            FL_FACE_ID_EXT_INFO_MASK |
1856            FL_FACE_ID_FEATURE_MD5_MASK));
1857    }
1858    /**
1859     * Resets the object initialization status to 'not initialized'.
1860     */
1861    private void resetInitialized()
1862    {
1863        initialized = 0;
1864    }
1865    /** reset all fields to initial value, equal to a new bean */
1866    public void reset(){
1867        checkMutable();
1868        this.id = null;
1869        this.imageMd5 = null;
1870        this.faceLeft = null;
1871        this.faceTop = null;
1872        this.faceWidth = null;
1873        this.faceHeight = null;
1874        this.eyeLeftx = null;
1875        this.eyeLefty = null;
1876        this.eyeRightx = null;
1877        this.eyeRighty = null;
1878        this.mouthX = null;
1879        this.mouthY = null;
1880        this.noseX = null;
1881        this.noseY = null;
1882        this.angleYaw = null;
1883        this.anglePitch = null;
1884        this.angleRoll = null;
1885        this.extInfo = null;
1886        this.featureMd5 = null;
1887        this.isNew = true;
1888        this.modified = 0;
1889        this.initialized = 0;
1890    }
1891    @Override
1892    public boolean equals(Object object)
1893    {
1894        if (!(object instanceof FaceBean)) {
1895            return false;
1896        }
1897
1898        FaceBean obj = (FaceBean) object;
1899        return new EqualsBuilder()
1900            .append(getId(), obj.getId())
1901            .append(getImageMd5(), obj.getImageMd5())
1902            .append(getFaceLeft(), obj.getFaceLeft())
1903            .append(getFaceTop(), obj.getFaceTop())
1904            .append(getFaceWidth(), obj.getFaceWidth())
1905            .append(getFaceHeight(), obj.getFaceHeight())
1906            .append(getEyeLeftx(), obj.getEyeLeftx())
1907            .append(getEyeLefty(), obj.getEyeLefty())
1908            .append(getEyeRightx(), obj.getEyeRightx())
1909            .append(getEyeRighty(), obj.getEyeRighty())
1910            .append(getMouthX(), obj.getMouthX())
1911            .append(getMouthY(), obj.getMouthY())
1912            .append(getNoseX(), obj.getNoseX())
1913            .append(getNoseY(), obj.getNoseY())
1914            .append(getAngleYaw(), obj.getAngleYaw())
1915            .append(getAnglePitch(), obj.getAnglePitch())
1916            .append(getAngleRoll(), obj.getAngleRoll())
1917            .append(getExtInfo(), obj.getExtInfo())
1918            .append(getFeatureMd5(), obj.getFeatureMd5())
1919            .isEquals();
1920    }
1921
1922    @Override
1923    public int hashCode()
1924    {
1925        return new HashCodeBuilder(-82280557, -700257973)
1926            .append(getId())
1927            .toHashCode();
1928    }
1929
1930    @Override
1931    public String toString() {
1932        return toString(true,false);
1933    }
1934    /**
1935     * cast byte array to HEX string
1936     * 
1937     * @param input
1938     * @return {@code null} if {@code input} is null
1939     */
1940    private static final String toHex(byte[] input) {
1941        if (null == input){
1942            return null;
1943        }
1944        StringBuffer sb = new StringBuffer(input.length * 2);
1945        for (int i = 0; i < input.length; i++) {
1946            sb.append(Character.forDigit((input[i] & 240) >> 4, 16));
1947            sb.append(Character.forDigit(input[i] & 15, 16));
1948        }
1949        return sb.toString();
1950    }
1951    protected static final StringBuilder append(StringBuilder buffer,boolean full,byte[] value){
1952        if(full || null == value){
1953            buffer.append(toHex(value));
1954        }else{
1955            buffer.append(value.length).append(" bytes");
1956        }
1957        return buffer;
1958    }
1959    private static int stringLimit = 64;
1960    private static final int MINIMUM_LIMIT = 16;
1961    protected static final StringBuilder append(StringBuilder buffer,boolean full,String value){
1962        if(full || null == value || value.length() <= stringLimit){
1963            buffer.append(value);
1964        }else{
1965            buffer.append(value.substring(0,stringLimit - 8)).append(" ...").append(value.substring(stringLimit-4,stringLimit));
1966        }
1967        return buffer;
1968    }
1969    protected static final <T>StringBuilder append(StringBuilder buffer,boolean full,T value){
1970        return buffer.append(value);
1971    }
1972    public static final void setStringLimit(int limit){
1973        if(limit < MINIMUM_LIMIT){
1974            throw new IllegalArgumentException(String.format("INVALID limit %d,minimum value %d",limit,MINIMUM_LIMIT));
1975        }
1976        stringLimit = limit;
1977    }
1978    @Override
1979    public String toString(boolean notNull, boolean fullIfStringOrBytes) {
1980        // only output initialized field
1981        StringBuilder builder = new StringBuilder(this.getClass().getName()).append("@").append(Integer.toHexString(this.hashCode())).append("[");
1982        int count = 0;        
1983        if(checkIdInitialized()){
1984            if(!notNull || null != getId()){
1985                if(count++ >0){
1986                    builder.append(",");
1987                }
1988                builder.append("id=");
1989                append(builder,fullIfStringOrBytes,getId());
1990            }
1991        }
1992        if(checkImageMd5Initialized()){
1993            if(!notNull || null != getImageMd5()){
1994                if(count++ >0){
1995                    builder.append(",");
1996                }
1997                builder.append("image_md5=");
1998                append(builder,fullIfStringOrBytes,getImageMd5());
1999            }
2000        }
2001        if(checkFaceLeftInitialized()){
2002            if(!notNull || null != getFaceLeft()){
2003                if(count++ >0){
2004                    builder.append(",");
2005                }
2006                builder.append("face_left=");
2007                append(builder,fullIfStringOrBytes,getFaceLeft());
2008            }
2009        }
2010        if(checkFaceTopInitialized()){
2011            if(!notNull || null != getFaceTop()){
2012                if(count++ >0){
2013                    builder.append(",");
2014                }
2015                builder.append("face_top=");
2016                append(builder,fullIfStringOrBytes,getFaceTop());
2017            }
2018        }
2019        if(checkFaceWidthInitialized()){
2020            if(!notNull || null != getFaceWidth()){
2021                if(count++ >0){
2022                    builder.append(",");
2023                }
2024                builder.append("face_width=");
2025                append(builder,fullIfStringOrBytes,getFaceWidth());
2026            }
2027        }
2028        if(checkFaceHeightInitialized()){
2029            if(!notNull || null != getFaceHeight()){
2030                if(count++ >0){
2031                    builder.append(",");
2032                }
2033                builder.append("face_height=");
2034                append(builder,fullIfStringOrBytes,getFaceHeight());
2035            }
2036        }
2037        if(checkEyeLeftxInitialized()){
2038            if(!notNull || null != getEyeLeftx()){
2039                if(count++ >0){
2040                    builder.append(",");
2041                }
2042                builder.append("eye_leftx=");
2043                append(builder,fullIfStringOrBytes,getEyeLeftx());
2044            }
2045        }
2046        if(checkEyeLeftyInitialized()){
2047            if(!notNull || null != getEyeLefty()){
2048                if(count++ >0){
2049                    builder.append(",");
2050                }
2051                builder.append("eye_lefty=");
2052                append(builder,fullIfStringOrBytes,getEyeLefty());
2053            }
2054        }
2055        if(checkEyeRightxInitialized()){
2056            if(!notNull || null != getEyeRightx()){
2057                if(count++ >0){
2058                    builder.append(",");
2059                }
2060                builder.append("eye_rightx=");
2061                append(builder,fullIfStringOrBytes,getEyeRightx());
2062            }
2063        }
2064        if(checkEyeRightyInitialized()){
2065            if(!notNull || null != getEyeRighty()){
2066                if(count++ >0){
2067                    builder.append(",");
2068                }
2069                builder.append("eye_righty=");
2070                append(builder,fullIfStringOrBytes,getEyeRighty());
2071            }
2072        }
2073        if(checkMouthXInitialized()){
2074            if(!notNull || null != getMouthX()){
2075                if(count++ >0){
2076                    builder.append(",");
2077                }
2078                builder.append("mouth_x=");
2079                append(builder,fullIfStringOrBytes,getMouthX());
2080            }
2081        }
2082        if(checkMouthYInitialized()){
2083            if(!notNull || null != getMouthY()){
2084                if(count++ >0){
2085                    builder.append(",");
2086                }
2087                builder.append("mouth_y=");
2088                append(builder,fullIfStringOrBytes,getMouthY());
2089            }
2090        }
2091        if(checkNoseXInitialized()){
2092            if(!notNull || null != getNoseX()){
2093                if(count++ >0){
2094                    builder.append(",");
2095                }
2096                builder.append("nose_x=");
2097                append(builder,fullIfStringOrBytes,getNoseX());
2098            }
2099        }
2100        if(checkNoseYInitialized()){
2101            if(!notNull || null != getNoseY()){
2102                if(count++ >0){
2103                    builder.append(",");
2104                }
2105                builder.append("nose_y=");
2106                append(builder,fullIfStringOrBytes,getNoseY());
2107            }
2108        }
2109        if(checkAngleYawInitialized()){
2110            if(!notNull || null != getAngleYaw()){
2111                if(count++ >0){
2112                    builder.append(",");
2113                }
2114                builder.append("angle_yaw=");
2115                append(builder,fullIfStringOrBytes,getAngleYaw());
2116            }
2117        }
2118        if(checkAnglePitchInitialized()){
2119            if(!notNull || null != getAnglePitch()){
2120                if(count++ >0){
2121                    builder.append(",");
2122                }
2123                builder.append("angle_pitch=");
2124                append(builder,fullIfStringOrBytes,getAnglePitch());
2125            }
2126        }
2127        if(checkAngleRollInitialized()){
2128            if(!notNull || null != getAngleRoll()){
2129                if(count++ >0){
2130                    builder.append(",");
2131                }
2132                builder.append("angle_roll=");
2133                append(builder,fullIfStringOrBytes,getAngleRoll());
2134            }
2135        }
2136        if(checkExtInfoInitialized()){
2137            if(!notNull || null != getExtInfo()){
2138                if(count++ >0){
2139                    builder.append(",");
2140                }
2141                builder.append("ext_info=");
2142                append(builder,fullIfStringOrBytes,getExtInfo());
2143            }
2144        }
2145        if(checkFeatureMd5Initialized()){
2146            if(!notNull || null != getFeatureMd5()){
2147                if(count++ >0){
2148                    builder.append(",");
2149                }
2150                builder.append("feature_md5=");
2151                append(builder,fullIfStringOrBytes,getFeatureMd5());
2152            }
2153        }
2154        builder.append("]");
2155        return builder.toString();
2156    }
2157    @Override
2158    public int compareTo(FaceBean object){
2159        return new CompareToBuilder()
2160            .append(getId(), object.getId())
2161            .append(getImageMd5(), object.getImageMd5())
2162            .append(getFaceLeft(), object.getFaceLeft())
2163            .append(getFaceTop(), object.getFaceTop())
2164            .append(getFaceWidth(), object.getFaceWidth())
2165            .append(getFaceHeight(), object.getFaceHeight())
2166            .append(getEyeLeftx(), object.getEyeLeftx())
2167            .append(getEyeLefty(), object.getEyeLefty())
2168            .append(getEyeRightx(), object.getEyeRightx())
2169            .append(getEyeRighty(), object.getEyeRighty())
2170            .append(getMouthX(), object.getMouthX())
2171            .append(getMouthY(), object.getMouthY())
2172            .append(getNoseX(), object.getNoseX())
2173            .append(getNoseY(), object.getNoseY())
2174            .append(getAngleYaw(), object.getAngleYaw())
2175            .append(getAnglePitch(), object.getAnglePitch())
2176            .append(getAngleRoll(), object.getAngleRoll())
2177            .append(getExtInfo(), object.getExtInfo())
2178            .append(getFeatureMd5(), object.getFeatureMd5())
2179            .toComparison();
2180    }
2181    @Override
2182    public FaceBean clone(){
2183        try {
2184            return (FaceBean) super.clone();
2185        } catch (CloneNotSupportedException e) {
2186            throw new RuntimeException(e);
2187        }
2188    }
2189    /**
2190     * Make {@code this} to a NULL bean<br>
2191     * set all fields to null, {@link #modified} and {@link #initialized} be set to 0
2192     * @return {@code this} bean
2193     * @author guyadong
2194     */
2195    public FaceBean asNULL()
2196    {   
2197        checkMutable();
2198        
2199        setId((Integer)null);
2200        setImageMd5((String)null);
2201        setFaceLeft((Integer)null);
2202        setFaceTop((Integer)null);
2203        setFaceWidth((Integer)null);
2204        setFaceHeight((Integer)null);
2205        setEyeLeftx((Integer)null);
2206        setEyeLefty((Integer)null);
2207        setEyeRightx((Integer)null);
2208        setEyeRighty((Integer)null);
2209        setMouthX((Integer)null);
2210        setMouthY((Integer)null);
2211        setNoseX((Integer)null);
2212        setNoseY((Integer)null);
2213        setAngleYaw((Integer)null);
2214        setAnglePitch((Integer)null);
2215        setAngleRoll((Integer)null);
2216        setExtInfo((java.nio.ByteBuffer)null);
2217        setFeatureMd5((String)null);
2218        isNew(true);
2219        resetInitialized();
2220        resetIsModified();
2221        return this;
2222    }
2223    /**
2224     * check whether this bean is a NULL bean 
2225     * @return {@code true} if {@link #initialized} be set to zero
2226     * @see #asNULL()
2227     */
2228    public boolean checkNULL(){
2229        return 0 == getInitialized();
2230    }
2231    /** 
2232     * @param source source list
2233     * @return {@code source} replace {@code null} element with null instance({@link #NULL})
2234     */
2235    public static final List<FaceBean> replaceNull(List<FaceBean> source){
2236        if(null != source){
2237            for(int i = 0,endIndex = source.size();i<endIndex;++i){
2238                if(null == source.get(i)){
2239                    source.set(i, NULL);
2240                }
2241            }
2242        }
2243        return source;
2244    }
2245    /** 
2246     * @param source input list
2247     * @return replace null instance element with {@code null}
2248     * @see #checkNULL()
2249     */
2250    public static final List<FaceBean> replaceNullInstance(List<FaceBean> source){
2251        if(null != source){
2252            for(int i = 0,endIndex = source.size();i<endIndex;++i){
2253                if(source.get(i).checkNULL()){
2254                    source.set(i, null);
2255                }
2256            }
2257        }
2258        return source;
2259    }
2260    @Override
2261    public FaceBean copy(FaceBean bean)
2262    {
2263        return copy(bean,new int[]{});
2264    }
2265    @Override
2266    public FaceBean copy(FaceBean bean, int... fieldList)
2267    {
2268        if (null == fieldList || 0 == fieldList.length){
2269            fieldList = new int[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
2270        }
2271        for (int i = 0; i < fieldList.length; ++i) {
2272            if( bean.isInitialized(fieldList[i]) && !Objects.deepEquals(bean.getValue(fieldList[i]), getValue(fieldList[i]))){
2273                setValue(fieldList[i], bean.getValue(fieldList[i]));
2274            }
2275        }
2276        return this;
2277    }
2278        
2279    @Override
2280    public FaceBean copy(FaceBean bean, String... fieldList)
2281    {
2282        if (null == fieldList || 0 == fieldList.length){
2283            copy(bean,(int[])null);
2284        }else{
2285            int field;
2286            for (int i = 0; i < fieldList.length; i++) {
2287                field = columnIDOf(fieldList[i].trim());
2288                if(bean.isInitialized(field) && !Objects.deepEquals(bean.getValue(field), getValue(field))){
2289                    setValue(field, bean.getValue(field));
2290                }
2291            }
2292        }
2293        return this;
2294    }
2295
2296    @SuppressWarnings("unchecked")
2297    @Override
2298    public <T>T getValue(int columnID)
2299    {
2300        switch( columnID ){
2301        case FL_FACE_ID_ID: 
2302            return (T)getId();        
2303        case FL_FACE_ID_IMAGE_MD5: 
2304            return (T)getImageMd5();        
2305        case FL_FACE_ID_FACE_LEFT: 
2306            return (T)getFaceLeft();        
2307        case FL_FACE_ID_FACE_TOP: 
2308            return (T)getFaceTop();        
2309        case FL_FACE_ID_FACE_WIDTH: 
2310            return (T)getFaceWidth();        
2311        case FL_FACE_ID_FACE_HEIGHT: 
2312            return (T)getFaceHeight();        
2313        case FL_FACE_ID_EYE_LEFTX: 
2314            return (T)getEyeLeftx();        
2315        case FL_FACE_ID_EYE_LEFTY: 
2316            return (T)getEyeLefty();        
2317        case FL_FACE_ID_EYE_RIGHTX: 
2318            return (T)getEyeRightx();        
2319        case FL_FACE_ID_EYE_RIGHTY: 
2320            return (T)getEyeRighty();        
2321        case FL_FACE_ID_MOUTH_X: 
2322            return (T)getMouthX();        
2323        case FL_FACE_ID_MOUTH_Y: 
2324            return (T)getMouthY();        
2325        case FL_FACE_ID_NOSE_X: 
2326            return (T)getNoseX();        
2327        case FL_FACE_ID_NOSE_Y: 
2328            return (T)getNoseY();        
2329        case FL_FACE_ID_ANGLE_YAW: 
2330            return (T)getAngleYaw();        
2331        case FL_FACE_ID_ANGLE_PITCH: 
2332            return (T)getAnglePitch();        
2333        case FL_FACE_ID_ANGLE_ROLL: 
2334            return (T)getAngleRoll();        
2335        case FL_FACE_ID_EXT_INFO: 
2336            return (T)getExtInfo();        
2337        case FL_FACE_ID_FEATURE_MD5: 
2338            return (T)getFeatureMd5();        
2339        default:
2340            return null;
2341        }
2342    }
2343
2344    @Override
2345    public <T> void setValue(int columnID,T value)
2346    {
2347        switch( columnID ) {
2348        case FL_FACE_ID_ID:
2349            setId((Integer)value);
2350            break;
2351        case FL_FACE_ID_IMAGE_MD5:
2352            setImageMd5((String)value);
2353            break;
2354        case FL_FACE_ID_FACE_LEFT:
2355            setFaceLeft((Integer)value);
2356            break;
2357        case FL_FACE_ID_FACE_TOP:
2358            setFaceTop((Integer)value);
2359            break;
2360        case FL_FACE_ID_FACE_WIDTH:
2361            setFaceWidth((Integer)value);
2362            break;
2363        case FL_FACE_ID_FACE_HEIGHT:
2364            setFaceHeight((Integer)value);
2365            break;
2366        case FL_FACE_ID_EYE_LEFTX:
2367            setEyeLeftx((Integer)value);
2368            break;
2369        case FL_FACE_ID_EYE_LEFTY:
2370            setEyeLefty((Integer)value);
2371            break;
2372        case FL_FACE_ID_EYE_RIGHTX:
2373            setEyeRightx((Integer)value);
2374            break;
2375        case FL_FACE_ID_EYE_RIGHTY:
2376            setEyeRighty((Integer)value);
2377            break;
2378        case FL_FACE_ID_MOUTH_X:
2379            setMouthX((Integer)value);
2380            break;
2381        case FL_FACE_ID_MOUTH_Y:
2382            setMouthY((Integer)value);
2383            break;
2384        case FL_FACE_ID_NOSE_X:
2385            setNoseX((Integer)value);
2386            break;
2387        case FL_FACE_ID_NOSE_Y:
2388            setNoseY((Integer)value);
2389            break;
2390        case FL_FACE_ID_ANGLE_YAW:
2391            setAngleYaw((Integer)value);
2392            break;
2393        case FL_FACE_ID_ANGLE_PITCH:
2394            setAnglePitch((Integer)value);
2395            break;
2396        case FL_FACE_ID_ANGLE_ROLL:
2397            setAngleRoll((Integer)value);
2398            break;
2399        case FL_FACE_ID_EXT_INFO:
2400            setExtInfo((java.nio.ByteBuffer)value);
2401            break;
2402        case FL_FACE_ID_FEATURE_MD5:
2403            setFeatureMd5((String)value);
2404            break;
2405        default:
2406            break;
2407        }
2408    }
2409    
2410    @Override
2411    public <T> T getValue(String column)
2412    {
2413        return getValue(columnIDOf(column));
2414    }
2415
2416    @Override
2417    public <T> void setValue(String column,T value)
2418    {
2419        setValue(columnIDOf(column),value);
2420    }
2421    
2422    /**
2423     * @param column column name
2424     * @return column id for the given field name or negative if {@code column} is invalid name 
2425     */
2426    public static int columnIDOf(String column){
2427        int index = FL_FACE_FIELDS_LIST.indexOf(column);
2428        return  index < 0 
2429            ? FL_FACE_JAVA_FIELDS_LIST.indexOf(column)
2430            : index;
2431    }
2432    
2433    public static String columnNameOf(int columnId){
2434        try{
2435            return FL_FACE_FIELDS_LIST.get(columnId);
2436        } catch(IndexOutOfBoundsException e){
2437            return null;
2438        }
2439    }
2440    
2441    public static Class<?> typeOf(int columnId){
2442        try{
2443            return FL_FACE_FIELD_TYPES[columnId];
2444        } catch(IndexOutOfBoundsException e){
2445            return null;
2446        }
2447    }
2448    
2449    public static final Builder builder(){
2450        return new Builder().reset();
2451    }
2452    /** 
2453     * a builder for FaceBean,the template instance is thread local variable
2454     * a instance of Builder can be reused.
2455     */
2456    public static final class Builder{
2457        /** FaceBean instance used for template to create new FaceBean instance. */
2458        static final ThreadLocal<FaceBean> TEMPLATE = new ThreadLocal<FaceBean>(){
2459            @Override
2460            protected FaceBean initialValue() {
2461                return new FaceBean();
2462            }};
2463        private Builder() {}
2464        /** 
2465         * reset the bean as template 
2466         * @see FaceBean#reset()
2467         */
2468        public Builder reset(){
2469            TEMPLATE.get().reset();
2470            return this;
2471        }
2472        /** set a bean as template,must not be {@code null} */
2473        public Builder template(FaceBean bean){
2474            if(null == bean){
2475                throw new NullPointerException();
2476            }
2477            TEMPLATE.set(bean);
2478            return this;
2479        }
2480        /** return a clone instance of {@link #TEMPLATE}*/
2481        public FaceBean build(){
2482            return TEMPLATE.get().clone();
2483        }
2484        /** 
2485         * fill the field : fl_face.id
2486         * @param id 主键
2487         * @see FaceBean#getId()
2488         * @see FaceBean#setId(Integer)
2489         */
2490        public Builder id(Integer id){
2491            TEMPLATE.get().setId(id);
2492            return this;
2493        }
2494        /** 
2495         * fill the field : fl_face.image_md5
2496         * @param imageMd5 外键,所属图像id
2497         * @see FaceBean#getImageMd5()
2498         * @see FaceBean#setImageMd5(String)
2499         */
2500        public Builder imageMd5(String imageMd5){
2501            TEMPLATE.get().setImageMd5(imageMd5);
2502            return this;
2503        }
2504        /** 
2505         * fill the field : fl_face.face_left
2506         * @param faceLeft 人脸位置矩形:x
2507         * @see FaceBean#getFaceLeft()
2508         * @see FaceBean#setFaceLeft(Integer)
2509         */
2510        public Builder faceLeft(Integer faceLeft){
2511            TEMPLATE.get().setFaceLeft(faceLeft);
2512            return this;
2513        }
2514        /** 
2515         * fill the field : fl_face.face_top
2516         * @param faceTop 人脸位置矩形:y
2517         * @see FaceBean#getFaceTop()
2518         * @see FaceBean#setFaceTop(Integer)
2519         */
2520        public Builder faceTop(Integer faceTop){
2521            TEMPLATE.get().setFaceTop(faceTop);
2522            return this;
2523        }
2524        /** 
2525         * fill the field : fl_face.face_width
2526         * @param faceWidth 人脸位置矩形:width
2527         * @see FaceBean#getFaceWidth()
2528         * @see FaceBean#setFaceWidth(Integer)
2529         */
2530        public Builder faceWidth(Integer faceWidth){
2531            TEMPLATE.get().setFaceWidth(faceWidth);
2532            return this;
2533        }
2534        /** 
2535         * fill the field : fl_face.face_height
2536         * @param faceHeight 人脸位置矩形:height
2537         * @see FaceBean#getFaceHeight()
2538         * @see FaceBean#setFaceHeight(Integer)
2539         */
2540        public Builder faceHeight(Integer faceHeight){
2541            TEMPLATE.get().setFaceHeight(faceHeight);
2542            return this;
2543        }
2544        /** 
2545         * fill the field : fl_face.eye_leftx
2546         * @param eyeLeftx 左眼位置:x
2547         * @see FaceBean#getEyeLeftx()
2548         * @see FaceBean#setEyeLeftx(Integer)
2549         */
2550        public Builder eyeLeftx(Integer eyeLeftx){
2551            TEMPLATE.get().setEyeLeftx(eyeLeftx);
2552            return this;
2553        }
2554        /** 
2555         * fill the field : fl_face.eye_lefty
2556         * @param eyeLefty 左眼位置:y
2557         * @see FaceBean#getEyeLefty()
2558         * @see FaceBean#setEyeLefty(Integer)
2559         */
2560        public Builder eyeLefty(Integer eyeLefty){
2561            TEMPLATE.get().setEyeLefty(eyeLefty);
2562            return this;
2563        }
2564        /** 
2565         * fill the field : fl_face.eye_rightx
2566         * @param eyeRightx 右眼位置:x
2567         * @see FaceBean#getEyeRightx()
2568         * @see FaceBean#setEyeRightx(Integer)
2569         */
2570        public Builder eyeRightx(Integer eyeRightx){
2571            TEMPLATE.get().setEyeRightx(eyeRightx);
2572            return this;
2573        }
2574        /** 
2575         * fill the field : fl_face.eye_righty
2576         * @param eyeRighty 右眼位置:y
2577         * @see FaceBean#getEyeRighty()
2578         * @see FaceBean#setEyeRighty(Integer)
2579         */
2580        public Builder eyeRighty(Integer eyeRighty){
2581            TEMPLATE.get().setEyeRighty(eyeRighty);
2582            return this;
2583        }
2584        /** 
2585         * fill the field : fl_face.mouth_x
2586         * @param mouthX 嘴巴位置:x
2587         * @see FaceBean#getMouthX()
2588         * @see FaceBean#setMouthX(Integer)
2589         */
2590        public Builder mouthX(Integer mouthX){
2591            TEMPLATE.get().setMouthX(mouthX);
2592            return this;
2593        }
2594        /** 
2595         * fill the field : fl_face.mouth_y
2596         * @param mouthY 嘴巴位置:y
2597         * @see FaceBean#getMouthY()
2598         * @see FaceBean#setMouthY(Integer)
2599         */
2600        public Builder mouthY(Integer mouthY){
2601            TEMPLATE.get().setMouthY(mouthY);
2602            return this;
2603        }
2604        /** 
2605         * fill the field : fl_face.nose_x
2606         * @param noseX 鼻子位置:x
2607         * @see FaceBean#getNoseX()
2608         * @see FaceBean#setNoseX(Integer)
2609         */
2610        public Builder noseX(Integer noseX){
2611            TEMPLATE.get().setNoseX(noseX);
2612            return this;
2613        }
2614        /** 
2615         * fill the field : fl_face.nose_y
2616         * @param noseY 鼻子位置:y
2617         * @see FaceBean#getNoseY()
2618         * @see FaceBean#setNoseY(Integer)
2619         */
2620        public Builder noseY(Integer noseY){
2621            TEMPLATE.get().setNoseY(noseY);
2622            return this;
2623        }
2624        /** 
2625         * fill the field : fl_face.angle_yaw
2626         * @param angleYaw 人脸姿态:偏航角
2627         * @see FaceBean#getAngleYaw()
2628         * @see FaceBean#setAngleYaw(Integer)
2629         */
2630        public Builder angleYaw(Integer angleYaw){
2631            TEMPLATE.get().setAngleYaw(angleYaw);
2632            return this;
2633        }
2634        /** 
2635         * fill the field : fl_face.angle_pitch
2636         * @param anglePitch 人脸姿态:俯仰角
2637         * @see FaceBean#getAnglePitch()
2638         * @see FaceBean#setAnglePitch(Integer)
2639         */
2640        public Builder anglePitch(Integer anglePitch){
2641            TEMPLATE.get().setAnglePitch(anglePitch);
2642            return this;
2643        }
2644        /** 
2645         * fill the field : fl_face.angle_roll
2646         * @param angleRoll 人脸姿态:滚转角
2647         * @see FaceBean#getAngleRoll()
2648         * @see FaceBean#setAngleRoll(Integer)
2649         */
2650        public Builder angleRoll(Integer angleRoll){
2651            TEMPLATE.get().setAngleRoll(angleRoll);
2652            return this;
2653        }
2654        /** 
2655         * fill the field : fl_face.ext_info
2656         * @param extInfo 扩展字段,保存人脸检测基本信息之外的其他数据,内容由SDK负责解析
2657         * @see FaceBean#getExtInfo()
2658         * @see FaceBean#setExtInfo(java.nio.ByteBuffer)
2659         */
2660        public Builder extInfo(java.nio.ByteBuffer extInfo){
2661            TEMPLATE.get().setExtInfo(extInfo);
2662            return this;
2663        }
2664        /** 
2665         * fill the field : fl_face.feature_md5
2666         * @param featureMd5 外键,人脸特征数据MD5 id
2667         * @see FaceBean#getFeatureMd5()
2668         * @see FaceBean#setFeatureMd5(String)
2669         */
2670        public Builder featureMd5(String featureMd5){
2671            TEMPLATE.get().setFeatureMd5(featureMd5);
2672            return this;
2673        }
2674    }
2675}