代码之家  ›  专栏  ›  技术社区  ›  bharath

org.hibernate.id.identifierGenerationException:为类生成的ID为空

  •  0
  • bharath  · 技术社区  · 8 年前

    我在插入具有两个依赖项的表时得到以下异常

    看看我的实体类,这些是自动生成的

    运输车辆协会河流

    package com.rasvek.cg.entity;
    // Generated May 14, 2018 11:39:07 PM by Hibernate Tools 5.1.7.Final
    
    import javax.persistence.AttributeOverride;
    import javax.persistence.AttributeOverrides;
    import javax.persistence.Column;
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.JoinColumn;
    import javax.persistence.ManyToOne;
    import javax.persistence.Table;
    
    /**
     * AssocTransportVehicleDriver generated by hbm2java
     */
    @Entity
    @Table(name = "assoc_transport_vehicle_driver", catalog = "campus_guru_01")
    public class AssocTransportVehicleDriver implements java.io.Serializable {
    
        private AssocTransportVehicleDriverId id;
        private TransportDriverInfo transportDriverInfo;
        private TransportVehicleInfo transportVehicleInfo;
    
        public AssocTransportVehicleDriver() {
        }
    
        public AssocTransportVehicleDriver(AssocTransportVehicleDriverId id, TransportDriverInfo transportDriverInfo,
                TransportVehicleInfo transportVehicleInfo) {
            this.id = id;
            this.transportDriverInfo = transportDriverInfo;
            this.transportVehicleInfo = transportVehicleInfo;
        }
    
        @EmbeddedId
    
        @AttributeOverrides({
                @AttributeOverride(name = "vehicleId", column = @Column(name = "vehicle_id", nullable = false)),
                @AttributeOverride(name = "tdiId", column = @Column(name = "tdi_id", nullable = false)) })
        public AssocTransportVehicleDriverId getId() {
            return this.id;
        }
    
        public void setId(AssocTransportVehicleDriverId id) {
            this.id = id;
        }
    
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "tdi_id", nullable = false, insertable = false, updatable = false)
        public TransportDriverInfo getTransportDriverInfo() {
            return this.transportDriverInfo;
        }
    
        public void setTransportDriverInfo(TransportDriverInfo transportDriverInfo) {
            this.transportDriverInfo = transportDriverInfo;
        }
    
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "vehicle_id", nullable = false, insertable = false, updatable = false)
        public TransportVehicleInfo getTransportVehicleInfo() {
            return this.transportVehicleInfo;
        }
    
        public void setTransportVehicleInfo(TransportVehicleInfo transportVehicleInfo) {
            this.transportVehicleInfo = transportVehicleInfo;  
        }
    
    }
    

    另一个 (@Embeddable) 与此类一起生成的类称为

    AssoctTransportVehicledRiverID公司 //它的用途是什么

    @Embeddable
    public class AssocTransportVehicleDriverId implements java.io.Serializable {
    
        private int vehicleId;
        private int tdiId;
    
        public AssocTransportVehicleDriverId() {
        }
    
        public AssocTransportVehicleDriverId(int vehicleId, int tdiId) {
            this.vehicleId = vehicleId;
            this.tdiId = tdiId;
        }
    
        @Column(name = "vehicle_id", nullable = false)
        public int getVehicleId() {
            return this.vehicleId;
        }
    
        public void setVehicleId(int vehicleId) {
            this.vehicleId = vehicleId;
        }
    
        @Column(name = "tdi_id", nullable = false)
        public int getTdiId() {
            return this.tdiId;
        }
    
        public void setTdiId(int tdiId) {
            this.tdiId = tdiId;
        }
    
        public boolean equals(Object other) {
            if ((this == other))
                return true;
            if ((other == null))
                return false;
            if (!(other instanceof AssocTransportVehicleDriverId))
                return false;
            AssocTransportVehicleDriverId castOther = (AssocTransportVehicleDriverId) other;
    
            return (this.getVehicleId() == castOther.getVehicleId()) && (this.getTdiId() == castOther.getTdiId());
        }
    
        public int hashCode() {
            int result = 17;
    
            result = 37 * result + this.getVehicleId();
            result = 37 * result + this.getTdiId();
            return result;
        }
    
    }
    

    当我试图插入 AssocTransportVehicleDriver 上述异常正在发生。不知道为什么?

    assoctTransportVehicledRiver表中没有任何ID列,但它在生成时 .

    请看我的问题

                      AssocTransportVehicleDriver obj=null;
    
    
    
    
                        if(transportVehicleInfoId != 0 && transportDriverInfoId != 0)
                        {
                            TransportVehicleInfo    transportVehicleInfo1 = new TransportVehicleInfo();
    
                            TransportDriverInfo transportDriverInfo1 = new TransportDriverInfo();
    
                            transportDriverInfo1.setTdiId(transportDriverInfoId);
                            transportVehicleInfo1.setVehicleId(transportDriverInfoId);
    
    
                            obj= new AssocTransportVehicleDriver();
    
                            obj.setTransportDriverInfo(transportDriverInfo1);
                            obj.setTransportVehicleInfo(transportVehicleInfo1);
                            res=service.addAssocDriverVehicle(obj);
                        }  
    
    
    
    @Override
        public boolean addAssocDriverVehicle(AssocTransportVehicleDriver  assocTransportVehicleDriver) {
             boolean success = false;
             try {
    
                    currentSession=sessionFactory.getCurrentSession();
                    currentSession.save(assocTransportVehicleDriver);     
                    success=true;  
             }       
             catch (Exception e) {
                e.printStackTrace();  
            }
    
            return success; 
        }     
    

    请告诉我为什么会这样。如何插入 运输车辆协会河流 ?

    我对冬眠很陌生,原谅我,如果这是愚蠢的。

    谢谢您!.

    1 回复  |  直到 8 年前
        1
  •  0
  •   Zeromus    8 年前

    embeddedid是告诉hibernate表有一个复合pk vehicleId/tdiId 在这种情况下。

    你必须为每一个 AssocTransportVehicleDriver 很像其他领域

    obj= new AssocTransportVehicleDriver();
    obj.setTransportDriverInfo(transportDriverInfo1);
    obj.setTransportVehicleInfo(transportVehicleInfo1);
    

    hibernate如何在没有id的情况下生成insert语句?

    应该是这样的:

    obj.setId(new AssocTransportVehicleDriverId(vehicleId,tdiId));