ORA-01400: невозможно вставить NULL в, когда отображается с @onetomany и имеет составной первичный ключ на дочерней стороне - PullRequest
0 голосов
/ 28 сентября 2019
            1. @OneToMany (Uni Direction):

            Parent:

            @Entity
            @Table(name = "POLICY")
            @SequenceGenerator(name = "SEQ_POLICY", sequenceName = "SEQ_POLICY", allocationSize = 1)
            public class Policy implements Serializable {

            @Id
            @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_POLICY")
            @Column(name = "POLICY_ID")
            private BigDecimal policyID;

            @OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
            @JoinColumn(name = "POLICY_ID")
            private List<Carrier> carriers = new ArrayList<>();

            ...
            }

            Child: (Having composite Primary key)

            @Entity
            @Table(name = "CARRIER")
            public class Carrier implements Serializable{

            @EmbeddedId
            private CarrierPK carrierPK;



               ...getters and setters

                }

                Child Primary key:

                @Embeddable
                public class CarrierPK implements Serializable{

                    @Column(name="POLICY_ID")
                    private BigDecimal policyId;

                    @Column(name="TYPE_ID") 
                    private BigDecimal typeId; 

                    @Column(name="S_NUMBER")
                    private BigDecimal sNumber;

                 // getters and setter
                // hashcode and equals


                }

Код Dao: часть метода сохранения

 public class Bo{
    public void savePolicy(){        
                List<Carrier> carriers = new ArrayList<>();
                for(CarrierVo c:carriersList)     //CarrierVo  pojo from ui
                {
                 // to copy properties form pojo to entity 
                 Carrier cEntity =  somecalss.method(c)
                   CarrierPK cPK = new CarrierPK();
                    cPK.setSNumber(c.getSNumber()); 
                    cPK.setTypeId(c.getTypeId()); 
                    cEntity.setCarriersPK(cPK);
                    carriers .add(cEntity);
                }
                policyEntity.setCarriers(carriers );
                em.persist(policyEntity);
        }    
}

Когда я сохраняюсь, я получаю следующую ошибку: Причина: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: невозможно вставитьNULL into ("PROJECT". "CARRIER". "POLICY_ID")

Я пытался с двунаправленным отображением @OneToMany, также получал ту же ошибку.

1 Ответ

0 голосов
/ 28 сентября 2019

Он имеет одинаковое имя POLICY_ID для полей policyID и перевозчиков.Я думаю, что некорректно отображать список носителей как сущность «POLICY_ID» inPolicy в аннотации JoinColumn.Возможно, должно быть что-то вроде «CARRIER_ID» или проверьте описание таблицы, каким должен быть столбец.Попробуйте это исправить.И, если возможно, что носители могут быть обнуляемыми или пустыми, вы можете добавить nullable=true для отображения List<Carrier> carriers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...