• JPA中常見類型的映射問題


    1)int和String類型,是最簡單的。

    @Column(name = "sign_group_name")

        public String getName() {

           return name;

        }

    2)enum類型,

    private BossType type;

    @Column(name="type")

        @Enumerated(EnumType.ORDINAL)

        public BossType getType() {

           return type;

        }

    其中BossType為:

    public enum BossType {

        /**

         * 直接主管.

         */

        DIRECT(1),

        /**

         * 辅导员.

         */

        COUNSELOR(4);

       

        private int value;

        private BossType(int value){

           this.setValue(value);

        }

        public int getValue() {

           return value;

        }

        public void setValue(int value) {

           this.value = value;

        }

    }

    3)Date類型,其中TemporalType的取值有DATE,表示日期,TIME表示時間,TIMESTAMP表示日期和時間。

    private Date enterDate;

    @Column(name="enter_date")

        @Temporal(TemporalType.DATE)

        public Date getEnterDate() {

           return enterDate;

        }

    4)自定義類類型,如Employee,還有根據實際情況是一對一還是多對一,還有其屬性的值也要依據實際情況來設置。在不影響性能情況下,其fetch一般可設置為FetchType.EAGER,表示在get數據時沒有延遲。

    private Employee assistant;

    @ManyToOne(fetch = FetchType.EAGER)

        @JoinColumn(name="assistant_id")

        public Employee getAssistant() {

           return assistant;

        }

    5)List或Set

    private List<RoleMember> members;

    @OneToMany(mappedBy = "role", cascade = CascadeType.ALL, fetch = FetchType.LAZY)

        public List<RoleMember> getMembers() {

           return members;

        }

    其mappedBy的值是對應Role類中是role成員變量,cascade是設置在做CUD(create、update、delete)操作時是否級聯,fetch是設置在做R(read或get、load)操作時是否延遲。

    6)boolean類型,有兩種解決方案,第一種方案依賴了Hibernate,

    所有在此只介紹第二種。

    /**

         * 是否离职.

         */

        private int leftFlag;

         @Column(name="left_flag")

        protected int getLeftFlag() {

           return leftFlag;

        }

        protected void setLeftFlag(int leftFlag) {

           this.leftFlag = leftFlag;

        }

    @Transient

        public boolean isLeft() {

           return this.getLeftFlag() != 0;

        }

        public void setLeft(boolean leftFlag) {

           if(leftFlag)

               this.setLeftFlag(1);

           else

               this.setLeftFlag(0);

        }

    其int是映射到DB的,一般在方法名用Flag做標記,其設置訪問權限為protected,是爲了是只能在繼承該類的類中能訪問,另外還提供了is和set方法,主要是給業務邏輯層調用的。

  • 相关阅读:
    International Collegiate Programming Contest 2019 Latin American Regional Contests E. Eggfruit Cake(思维/尺取)
    Codeforces Round #673 (Div. 2) C. k-Amazing Numbers(思维)
    2020 计蒜之道 预赛 第一场 A、B
    生成字符画
    我对目前国内教学的看法
    Stm32 调试时发生HardFault_Handler
    python异常处理
    windows nfs客户端配置
    linux服务器删除文件后df -h查看文件系统占比无变化
    python ssh小程序
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3076901.html
Copyright © 2020-2023  润新知