来源百度百科
@Transient 和 @TableField(exist = false)一起加上
在Java中使用MyBatis或MyBatis-Plus框架时,我们经常需要处理实体类(Entity Class) 中的字段映射到数据库表中。有时候,我们希望某些字段不被映射到数据库表中,或者在某些场景下临时不想将某个字段映射到数据库表。为此,我们可以使用@Transient注解和@TableField(exist = false)注解来实现这一需求。
@Transient
@Transient是Java Persistence API(JPA)中的一个注解,用于指示一个属性不应被持久化到数据库中。当你使用JPA或者类似JPA的框架(如Hibernate)时,可以使用这个注解。
示例用法:
import javax.persistence.Transient;
public class ConstructionScheduleProcessRoute{
private String id;
@Transient
@ApiModelProperty(value = "工序权重%")
private double taskWeight;
}
在这个例子中,nonPersistentField字段不会被持久化到数据库中。
@TableField(exist = false)
在MyBatis或MyBatis-Plus中,@TableField注解用于指定实体类属性与数据库表列之间的映射关系。通过设置exist = false,可以指示MyBatis或MyBatis-Plus忽略该字段的数据库映射。
示例用法:
import javax.persistence.Transient;
public class ConstructionScheduleProcessRoute{
private String id;
@TableField(exist = false)
@ApiModelProperty(value = "工序权重%")
private double taskWeight;
}
在这个例子中,nonMappedField字段不会被映射到数据库表的任何列上。
结合使用 @Transient 和 @TableField(exist = false)
在某些情况下,你可能需要在JPA环境中使用@Transient,在MyBatis或MyBatis-Plus环境中使用@TableField(exist = false)。如果你需要在同一个实体类中同时使用这两种注解,你应该根据你正在使用的具体框架来选择合适的注解。例如:
如果你主要使用JPA(例如Spring Data JPA),则使用@Transient。
如果你主要使用MyBatis或MyBatis-Plus,则使用@TableField(exist = false)。
示例: 假设你在一个项目中同时使用了Spring Data JPA和MyBatis-Plus,你可以这样组合使用:
import javax.persistence.Transient;
public class ConstructionScheduleProcessRoute{
private String id;
@Transient
@TableField(exist = false)
@ApiModelProperty(value = "工序权重%")
private double taskWeight;
}
这样,nonMappedField在JPA环境中会被忽略(通过@Transient),在MyBatis或MyBatis-Plus环境中也不会被映射到数据库表列(通过@TableField(exist = false))。这种组合使用确保了代码的灵活性和在不同持久化框架间的兼容性。