我有一个在图形中使用的以下类,因此可以有父母和孩子:
@Entity(name = "PedagogicalNeed")
@Table(name = "PedagogicalNeed")
public class PedagogicalNeedEntity extends AbstractEntity implements PedagogicalNeed {
private String name;
private String description;
@ManyToMany(targetEntity = PedagogicalNeedEntity.class, fetch = FetchType.LAZY)
private Set parents = new HashSet(0);
@ManyToMany(targetEntity = PedagogicalNeedEntity.class, fetch = FetchType.LAZY)
private Set children = new HashSet(0);
...
}
超类AbstractEntity用于定义@Id字段:
@MappedSuperclass
public abstract class AbstractEntity implements Serializable {
...
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
}
我有以下请求,该请求应返回“父母”集合为空的实体.
@Query("SELECT pn FROM PedagogicalNeed pn WHERE pn.parents IS EMPTY")
Iterable findRoots();
我的问题是,执行此请求时,出现以下“ NOT NULL约束违反”:
Caused by: org.hsqldb.HsqlException: integrity constraint violation: NOT NULL check constraint; SYS_CT_10102 table: PEDAGOGICALNEED_PEDAGOGICALNEED column: PARENTS_ID
问题:如何退还没有父母的实体?
UPDATE:生成的架构如下:
CREATE MEMORY TABLE PUBLIC.PEDAGOGICALNEED(ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,DESCRIPTION VARCHAR(255),NAME VARCHAR(255))
ALTER TABLE PUBLIC.PEDAGOGICALNEED ALTER COLUMN ID RESTART WITH 1
CREATE MEMORY TABLE PUBLIC.PEDAGOGICALNEED_PEDAGOGICALNEED(
PEDAGOGICALNEED_ID BIGINT NOT NULL,
PARENTS_ID BIGINT NOT NULL,
CHILDREN_ID BIGINT NOT NULL,
PRIMARY KEY(PEDAGOGICALNEED_ID,CHILDREN_ID),
CONSTRAINT FK_GSX50JH17YMGUMDQ7ADD0Y0Y5 FOREIGN KEY(PARENTS_ID) REFERENCES PUBLIC.PEDAGOGICALNEED(ID),
CONSTRAINT FK_L6QY3L7AMTRVX1O62WVS6C9X8 FOREIGN KEY(PEDAGOGICALNEED_ID) REFERENCES PUBLIC.PEDAGOGICALNEED(ID),
CONSTRAINT FK_EHV0QET4GVHBX733YJV6Q9KQD FOREIGN KEY(CHILDREN_ID) REFERENCES PUBLIC.PEDAGOGICALNEED(ID))
我不了解此映射,为什么有一个包含三个字段的表“ PEDAGOGICALNEED_PEDAGOGICALNEED”? PedagogicalNeedEntity与它的父母之间的联系与同一个实体与它的孩子之间的联系无关.因此,应该有两个表,而不仅仅是一个表,每个表只有两列:
>第一个表应具有(PEDAGOGICALNEED_ID,CHILDREN_ID)作为键
>第二个表应具有(PEDAGOGICALNEED_ID,PARENTS_ID)作为键