Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 刷新单向实体时不为null约束冲突_Java_Sql_Oracle_Spring Boot_Hibernate - Fatal编程技术网

Java 刷新单向实体时不为null约束冲突

Java 刷新单向实体时不为null约束冲突,java,sql,oracle,spring-boot,hibernate,Java,Sql,Oracle,Spring Boot,Hibernate,我正在使用@OneToMany和@ManyToOne注释处理单向和双向映射,但在持久化实体并将其刷新到数据库中时,我无法突破单向映射的障碍 因此,两个表delivery\u company可能有许多delivery: SQL(Oracle): 单向映射: @Entity @Table(name = "Delivery") class DeliveryUniDirectional { @Id @SequenceGenerator(name = "del

我正在使用
@OneToMany
@ManyToOne
注释处理单向和双向映射,但在持久化实体并将其刷新到数据库中时,我无法突破单向映射的障碍

因此,两个表
delivery\u company
可能有许多
delivery

SQL(Oracle):

单向映射:

@Entity
@Table(name = "Delivery")
class DeliveryUniDirectional
{
    @Id
    @SequenceGenerator(name = "delivery_id_sequence", sequenceName = "delivery_id_sequence", allocationSize = 1)
    @GeneratedValue(generator = "delivery_id_sequence", strategy = GenerationType.SEQUENCE)
    @Column(name = "delivery_id")
    public Long deliveryId;

    public BigDecimal price;

    @Temporal(TemporalType.DATE)
    public Date deliveryTime;

// setters, getters
}

@Entity
@Table(name = "delivery_company")
class DeliveryCompanyUniDirectional {

    @Id
    @Column(name = "delivery_company_id")
    @SequenceGenerator(name = "delivery_company_id_sequence", sequenceName = "delivery_company_id_sequence", allocationSize = 1)
    @GeneratedValue(generator = "delivery_company_id_sequence", strategy = GenerationType.SEQUENCE)
    private Long deliveryCompanyId;

    @Column(unique = true)
    private String deliveryCompanyName;

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "delivery_id", nullable = false, insertable = false, updatable = false)
    private List<DeliveryUniDirectional> deliveries = new LinkedList<>();

// setters getters
}

我收到

javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute batch ...
// 
Caused by: java.sql.BatchUpdateException: ORA-01400: cannot insert NULL into ("TESTUSER"."DELIVERY"."DELIVERY_COMPANY_ID")
entityManager.flush()时

我尝试在
deliverycompanyinidirectional
中使用
@JoinColumn
,但在这种情况下,hibernate抱怨:

Error creating bean with name 'entityManagerFactory' defined in class path resource ...
// ...
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: wieczorek.jakub.shop.business.spring.model.domain.DeliveryUniDirectional column: delivery_id (should be mapped with insert="false" update="false")
显然,
delivery
表中外键的
notnull
约束存在问题。当我尝试使用双向映射时,持久化和刷新效果非常好,但我希望使用单向映射实现同样的效果


感谢阅读

您的@join列应该是
delivery\u company\u id
,因为它是您的外键

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="delivery_company_id", referencedColumnName="delivery_company_id", nullable = false)
private List<DeliveryUniDirectional> deliveries = new LinkedList<>();
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name=“delivery\u company\u id”,referencedColumnName=“delivery\u company\u id”,nullable=false)
私有列表传递=新建LinkedList();

我准备不同意Eklavya的观点,因为交货公司id是您所在表格中的一列。但这是因为我略过并意识到你没有遵循我认为是一种惯例:任何表中的ID列都只是名为ID,并且只有外键被命名为“id id”。当你做一个OneToMany注释时,连接列总是指向另一个表中的指向我的列。@ ZAG在POST中看到表创建SQL,更新到更清晰的版本,感谢@Eklayva提供了有效的解决方案(由于非空约束,我不得不添加
nullable=false
)。感谢@Zag提供的有用评论。
Error creating bean with name 'entityManagerFactory' defined in class path resource ...
// ...
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: wieczorek.jakub.shop.business.spring.model.domain.DeliveryUniDirectional column: delivery_id (should be mapped with insert="false" update="false")
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="delivery_company_id", referencedColumnName="delivery_company_id", nullable = false)
private List<DeliveryUniDirectional> deliveries = new LinkedList<>();