gpt4 book ai didi

java - 使用命名查询时 ManyToMany NOT NULL 检查约束

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:47:46 25 4
gpt4 key购买 nike

我有一个实体()映射其他实体(成员)的列表。此列表可能没有条目/为 null。然而,当我查询实体时,我从数据库中得到一个 NOT NULL check constraint 错误。它似乎连接到 NamedQueries,因为如果我通过 id 查询,我可以从数据库中读取实体。

@Entity
@NamedQueries({
@NamedQuery(name="getChildLayers",-
query = "SELECT la
FROM Layer la
WHERE la.parent = :parent AND la.deletedDate IS NULL")})
public class Layer extends CommonModel {
/*... other field */
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Layer.class, optional = true)
private Layer parent;

@ManyToMany(fetch = FetchType.LAZY, targetEntity = MyUser.class)
private List<MyUser> members;
public List<MyUser> getMembers() {
return members;
}
public void setMembers(List<MyUser> members) {
this.members = members;
}
/*... other getters and setters */
}

我收到此错误:违反完整性约束:NOT NULL 检查约束; SYS_CT_10298 表:LAYER_MYUSER 列:MEMBERS_ID

不过,我可以创建条目。

当我运行我的测试时,所有读取实体的测试都会失败(但创建有效)。如果我在创建方法中添加以下行:

  layer.setMembers(new ArrayList<MyUser>());

然后测试成员交替的方法起作用(意思是,我可以创建一个 Layer 并通过在列表中添加和删除元素来更改其 members)。

在我看来,只要 Layer 没有 Member,从数据库中读取实体就会失败。

我确实尝试将 @JoinColumn(nullable=true) 添加到该字段,但它没有任何改变。

我导入 javax.persistence 类。

关于我如何访问变量的示例(在 LayerService 中)

// this method works as expected
public Layer getById(Long id) {
Session s = sessionFactory.getCurrentSession();
return (Layer)s.get(Layer.class, id);
}

// this does not.
public List<Layer> getChildren(Layer layer) {
Query childrenQuery = sessionFactory.getCurrentSession().getNamedQuery("getChildLayers");
childrenQuery.setParameter("parent", layer);

return (List<Layer>) childrenQuery.list();
}

Jason Cs 回答后代码发生了变化:

图层

...
private final List<OCWUser> members = new ArrayList<>();
...
public void setMembers(List<OCWUser> members) {
this.members.clear();
this.members.addAll(members);
}

问题依然存在。

最佳答案

可以这么简单。我忘了添加 @JoinTable

@JoinTable(name = "LAYER_USER", joinColumns = @JoinColumn(nullable = true))

关于java - 使用命名查询时 ManyToMany NOT NULL 检查约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19789167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com