繁体   English   中英

使用@JoinColumn的Spring JPA Save实体

[英]Spring JPA Save entity with @JoinColumn

我有两个实体

实体1

    @Entity
    @Table(name = "Table1")
    public class Table1{
    @Id
    @SequenceGenerator(name = "Table1_SEQ", sequenceName = "Table1_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Table1_SEQ")
    @Column(name = "seq", updatable = false, unique = true, insertable = true)
    private Long seq;
    @Column(name = "number", updatable = false, insertable = true)
    private Long number;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "enumber", updatable = false, insertable = true)
    private Table2 table2;

实体2

    @Entity
    @Table(name = "Table2")
    public class Table2 {
    @Id
    @SequenceGenerator(name = "Table2_SEQ", sequenceName = "Table2_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Table2_SEQ")
    @Column(name = "enumber")
    private Long eNumber;

我有一个扩展JpaRepository的存储库

public interface Table1Repository extends JpaRepository<Table1, Long> {

}

当我尝试使用

Table1Repository rep;
Table1 table1; // Assume this is initialized correctly
rep.save(table1);

我收到一个Foriegn Key约束错误org.springframework.dao.DataIntegrityViolationException

表1在enumber列上具有与表2的外键关联,但是我不想在表2中插入任何内容。

如何保存到表1中?

我对Jpa不太熟悉,因此,如果您需要任何关于我所要求的说明或需要更多信息,请告诉我。

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "enumber", updatable = false, insertable = true)
    private Table2 table2; // THIS IS WRONG!

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "enumber", updatable = false, insertable = true)
    private Long enumberFKTable2; // THIS IS CORRECT!

   //getters and setters

使用所有spring注释实现另一个类似于table1的java类,称为table2。 然后执行以下代码:

//First, make sure that the foreign key exists!
number enumber = entityManager.getReference(Enumber.class, enumberId);

//test

if(enumber != null){
Table 1 table1 = new Table1();
table1.setEnumber(enumber);
entityManager.persist(table1);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM