Spring boot 如果不是表Spring Data JPA中的extist,则忽略列
我有一门课程,如下所示:Spring boot 如果不是表Spring Data JPA中的extist,则忽略列,spring-boot,spring-data-jpa,Spring Boot,Spring Data Jpa,我有一门课程,如下所示: @MappedSuperclass public abstract class BaseEntity { @Id Long id; String name; //getters and setters } 和两个实体扩展BaseEntity 头等舱 @Entity @Table(name= "table1") public class TValideB extends BaseEntity { @Column(name = "ph
@MappedSuperclass
public abstract class BaseEntity {
@Id
Long id;
String name;
//getters and setters
}
和两个实体扩展BaseEntity
头等舱
@Entity
@Table(name= "table1")
public class TValideB extends BaseEntity {
@Column(name = "phone")
String phone;
}
二等舱
@Entity
@Table(name= "table2")
public class TValide extends BaseEntity {
@Colmun(name = "mail")
String mail;
}
当我试图保存TValide时,会出现如下错误无效列“name”
;
在我的表2中,名称没有列
我的问题是如何忽略此列并保存实体?
存在其他方法而不从摘要中删除列名
上课
这应该可以解决您的问题。 在扩展
BaseEntity
的类中,对不需要的列执行此操作
@Entity
@AttributeOverride(name = "name", column = @Column(name = "name", insertable = false, updatable = false)
public class TValide extends BaseEntity {
@Colmun(name = "mail")
String mail;
}
如果必须使用基类,可以创建两个
@MappedSuperclass
public abstract class BaseEntityWithId {
@Id
Long id;
//getters and setters
}
@MappedSuperclass
public abstract class BaseEntityWithName extends BaseEntityWithId {
String name;
//getters and setters
}
然后,您只需根据表的列布局选择正确的选项。更改您使用抽象的方式。创建一个扩展BaseEntity的新抽象类,该类包含很少使用的字段 例如:
@MappedSuperclass
public abstract class BaseEntity {
@Id
Long id;
//getters and setters
}
@MappedSuperclass
public abstract class BaseNameEntity extends BaseEntity {
String name;
//getters and setters
}
@Entity
@Table(name= "table1")
public class TValideB extends BaseNameEntity {
@Column(name = "phone")
String phone;
//getters and setters
}
@Entity
@Table(name= "table2")
public class TValide extends BaseEntity {
@Column(name = "mail")
String mail;
//getters and setters
}
通过这样做,您可以配置所有结构。我只需在名称中添加
@Column
,insertable=false,updateable=false编辑我的抽象类,如下所示:
@MappedSuperclass
public abstract class BaseEntity {
@Id
Long id;
@Column(name = "name", insertable=false, updatable=false)
String name;
//getters and setters
}
这种方法避免了我创建大量抽象类或重写重写重写属性。创建抽象基本实体的目的是让其他实体都可以扩展它,因此只在抽象类中提供绝对必要的字段。如果您需要一个实体中的名称而不需要其他实体中的名称,则通常不适合将其保留在BaseEntity中。@ROHAN。是的,但我搜索是否存在其他方法,并感谢这是好的。我是在建议。我已经发布了一个答案,让我知道它是否有用。想象一下,如果我在抽象类中有很多attibute,那么在每个实体中,我需要使用AttributeOverride是痛苦的:(是的,但这似乎是唯一的解决方案,也没有那么痛苦,因为您只需要在类中编写一次。正如我所说,如果您的BaseEntity实际上是一个抽象类,并且只有绝对必要的字段,那么您可能不需要经常这样做em,但我需要重写BaseEntity中已经存在的列:(为什么您需要重写BaseEntity中已经存在的列?要在我的实体中定义AttributeOverride,我首先采用了这种方法,但我有很多表和实体,所以如果我使用您的方法,我需要创建很多抽象类来满足need@A.khalifa最终,你必须停止忽视你正在采取的方法的信号ing是错误的。根据我的经验,拥有定义所有属性的平面实体,并使用Lombok最小化样板代码是唯一的方法。你甚至可以生成实体代码,大多数IDE都有插件或内置功能来实现。如果你做了那么一点前期工作,你未来的自己会感谢你突然需要对数据库进行更改,只需对一个实体进行一次小的更改即可。