java - 关于使用 Hibernate 将对象映射到数据库

标签 java hibernate oracle11g annotations persistence

大家好,我是 hibernate 新手。当我在堆栈溢出中浏览 hibernate 相关主题时,我发现了这个

Need clarification about mapping objects to database, annotations, and one to many relationships

读完解决方案后,我有点困惑,并开始构建确切的场景,以了解多对一背后的实际机制,其中我使用了 Oracle 11g 数据库。当我运行我的项目时,hibernate 会自动生成表和 FK 关系,但在插入数据时它面临这个问题(这是显而易见的)

WARN: HHH000437: Attempting to save one or more entities that have a non-nullable association with an unsaved transient entity. The unsaved transient entity must be saved in an operation prior to saving these dependent entities.
Unsaved transient entity: ([com.entity.Authorization#0])
Dependent entities: ([[com.entity.Job#1]])

WARN: HHH000437: Attempting to save one or more entities that have a non-nullable association with an unsaved transient entity. The unsaved transient entity must be saved in an operation prior to saving these dependent entities.
    Unsaved transient entity: ([com.entity.JobFilteration#0])
    Dependent entities: ([[com.entity.Job#1]])
    Non-nullable association(s): ([com.entity.Job.jobfilteration])

我所做的正是我提到的上述主题的解决方案,我正在发布我的实体类,请帮助我解决这个问题

类(class)作业

@Entity
@Table(name="JOB")
public class Job implements Serializable {
    @Id 
    @SequenceGenerator(name="person_seq", sequenceName="SEQ_PERSON",initialValue=1,allocationSize=1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="person_seq")
    @Column(name="JOB_SERIAL")
    private int id;

    @Column(name="JOB_CATAGORY",nullable=false,length=200,unique=true)
    private String catagory;


    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn (name="JOB_AUTHID", nullable = false, updatable = false, insertable = false)
    private Authorization authorization;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn (name="JOB_JOBFILTERID", nullable = false, updatable = false, insertable = false)
    private JobFilteration jobfilteration;

JobFilteration 类

@Entity
@Table(name="JOB_FILTERATION")
public class JobFilteration implements Serializable {
    @Id 
    @SequenceGenerator(name="person_seq", sequenceName="SEQ_PERSON",initialValue=1,allocationSize=1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="person_seq")
    @Column(name="FILTER_SERIAL")
    private int id;

    @Column(name="FILTERNAME",nullable=false,length=200)
    private String filtername;

类授权

@Entity
@Table(name="AUTHORIZATION")
public class Authorization implements Serializable {
    @Id 
    @SequenceGenerator(name="person_seq", sequenceName="SEQ_PERSON",initialValue=1,allocationSize=1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE ,generator="person_seq")
    @Column(name="AUTH_ID")
    private int id;

    @Column(name="AUTHORISEDBY",nullable=false,length=200)
    private String authorisedby;

为了插入数据,我编写了一个方法public void insertToDB(Job job)(我对三个类使用了相同的序列以节省时间),然后

JoBDao jobdao= new JoBDao();
Job job= null;
Authorization auth = null;
JobFilteration jfilter = null;

try{
job= new Job();

auth = new Authorization();
    auth.setAuthorisedby("SOMEPERSON");

jfilter = new JobFilteration();
    jfilter.setFiltername("JEE");

job.setCatagory("PERMANENT");
job.setAuthorization(auth);
job.setJobfilteration(jfilter);


jobdao.addPersonandCard(job);

我认为发生异常是因为数据先插入作业表,然后再插入其他表。请帮我找出我错过了什么?

最佳答案

首先尝试保存依赖实体(在您的情况下为授权),然后尝试保存外部实体(作业)

session.save(Authorization's object);
session.save(Job's object)

关于java - 关于使用 Hibernate 将对象映射到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19533413/

相关文章:

java - 级联不适用于使用 Spring Data JPA 存储库进行删除

java - Hibernate HQL 嵌套查询

sql - ORA-00600 运行 ALTER 命令时?

java - 我怎样才能在 scala 中使用 apache 数学?

java - 如何使用 IntelliJ 正确导入 Java 代码样式设置?

java - Java中是否存在两端都可以访问的容量受限的队列对象?

java - 从 ojdbc6 JDBC 瘦驱动程序访问自定义对象返回类型

java - 如何在android上的按钮上画一条线?

java - Hibernate 4.0.0Final SessionFactory.openSession(拦截器拦截器)在哪里

windows - 安装程序 Oracle 11g windows 64 位不起作用