gpt4 book ai didi

java - JPA 外键为空

转载 作者:行者123 更新时间:2023-12-02 09:40:18 26 4
gpt4 key购买 nike

我正在开发一个 Web 应用程序,并且正在使用 JSF 和 JPA(EclipseLink)。我有表 storystory_translate,它们的映射如下:

@Entity
@Table(name = "story")
public class Story{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;
private String title;
private String description;
@OneToMany(mappedBy = "story", cascade=CascadeType.ALL)
private List<StoryTranslate> translateList;

//getters and setters
}

@Entity
@Table(name = "story_translate")
public class StoryTranslate{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;
@Column(name="STORY_ID")
private Integer storyId;
@ManyToOne
@JoinColumn(name="story_id", referencedColumnName="id", updatable=false, insertable=false)
private Story story;

//some other fields, getters and setters
}

ManagedBean 中,我正在执行以下操作:

 StoryTranslate translate = new StoryTranslate(null, sessionController.getEntity().getId(), getAuthUser().getId(), language, 
title, description, new Date(), false);
EntityTransaction transaction = TransactionSingleton.getActiveInstance();
Story story = storyService.read(sessionController.getEntity().getId());
if (story != null){
if (story.getTranslateList() == null){
story.setTranslateList(new ArrayList<StoryTranslate>());
}
story.getTranslateList().add(translate);
translate.setStory(story);
}
transaction.commit();

当我尝试创建新的 StoryTranslate 时,出现 DatabaseException,指出 story_id 不能为 null。

我以前管理过关系,但从未见过此错误。

问题出在哪里?

编辑:我很抱歉,但我忘记了映射的另一部分(一定是缺乏 sleep )。

最佳答案

问题是您在 StoryTranslate 类中为 STORY_ID 列声明了 storyId 属性,但在添加新的 StoryTranslate 时 ,您没有为其 storyId 属性设置任何值,并且我相信 STORY_ID 列具有 NOT NULL 约束,这就是为什么您收到异常说 Story_id 不能为空。

在提交事务之前设置 StoryTranslate 实例的 storyId 属性后,问题就应该得到解决。

但奇怪的是,您将 STORY_ID 列映射到 StoryTranslate< 的两个不同属性(storyIdstory)/ 类 .实际上,您不需要声明 storyId 属性,因为可以从 story 实例中检索该值。我建议您将 StoryTranslate 的映射更改为以下内容,您的代码应该可以正常工作,无需任何更改。

@Entity
@Table(name = "story_translate")
public class StoryTranslate{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;

@ManyToOne
@JoinColumn(name="story_id")
private Story story;

//some other fields, getters and setters
}

关于java - JPA 外键为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9913589/

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