我有3个表由JPA模型表示。 第一个:
@MappedSuperclass
public abstract class BaseEntity {
@Id
private Long id;
private Boolean active;
}
Next类扩展了BaseEntity:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Person extends BaseEntity{
private String name;
}
最后一个是延伸人的学生:
@Entity
public abstract class Student extends Person{
private Integer grade;
}
所以,我在Person和Student表中都有“active”字段。我希望当我通过PersonRepository更新字段“active”时,它还会更新Student表中的相应行。现在它只更新Person表。 有可能吗?
答案 0 :(得分:2)
我找到了注释@Formula的解决方案:
@Entity
public abstract class Student extends Person{
@Formula("(SELECT p.active FROM person p WHERE p.id = id)")
private Boolean active;
private Integer grade;
}
实现了更新Person表中的“active”字段而不是Student(我使用Spring Data)的方法:
public interface StudentRepository extends JpaRepository<Student, Long>{
@Override
@Query("update Person p set p.active = false where p.id = ?1")
@Modifying
@Transactional
void deactivate(Long id);
}
@Formula将获取Person的“活动”值并插入具有相同ID的Student。最终,Student的“active”字段根本不会被使用,但由于@MappedSuperclass,我无法摆脱它。