繁体   English   中英

在 Spring Boot 中,如何使用扩展的 setter 和 getter 设置(扩展的)属性?

[英]In Spring Boot, how do you set a (extended) property using extended setters and getters?

我正在使用 Spring Boot,并具有以下实体定义(已删节):

package com.vw.asa.entities;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.PreUpdate;
import javax.validation.constraints.NotNull;

public abstract class CmsModel extends Model {
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "is_active")
    private short isActive;
    
    
    public short getIsActive() {
        return isActive;
    }
    
    public void setIsActive(short isActive) {
        this.isActive = isActive;
    }
    
    public void setIsActive(String isActive) {
        if (isActive.equals("true")) {
            this.isActive = IS_TRUE;
        } else if (isActive.equals("1")) {
            this.isActive = IS_TRUE;
        } else {
            this.isActive = IS_FALSE;
        }
    }
} 

然后我有几个模型扩展了这个“基本”模型,遵循这种风格:

package com.vw.asa.entities.cms;

import com.vw.asa.entities.CmsModel;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;

/**
 * @author Barry Chapman
 */
@Entity
@Table(name = "cms_extra_questions", schema = "asa")
public class CmsExtraQuestions extends CmsModel {
        
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    
    ...
}

当我作为休眠查询的结果初始化CmsExtraQuestions的实例时,如果我在对象上调用setActive(true) ,它对该对象的成员没有影响。 当我将CmsModel基类中的 setter 和 getter 复制到CmsExtraQuestions类中时,它工作正常。


$entity = new CmsExtraQuestions();
$entity->setActive(true);


为什么这在调用扩展setter时不设置实例化对象的成员属性? 如果这是正常的 - 有没有办法将这些属性和成员函数添加到基本模型,以便它们也可以被继承?

新手的错误,我忘了补充@MappedSuperClass到继承的模型, CmsModel 这允许 JPA 映射来自该类的属性,就好像它们是在继承该基类的模型中定义的一样。

@MappedSuperClass
public abstract class CmsModel extends Model {
    
    @Basic(optional = false)
    @NotNull
    @Column(name = "is_active")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM