我在插入具有两个依赖项的表
时遇到以下异常查看我的实体类,这些是自动生成的
AssocTransportVehicleDriver
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)
类,名为
AssocTransportVehicleDriverId //它有什么用途
@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
时,上述异常正在发生。不知道为什么?
AssocTransportVehicleDriver表在表格中没有任何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;
}
请让我知道它为什么会发生。如何插入AssocTransportVehicleDriver
?
我是一个非常新的冬眠,请原谅我,如果它是愚蠢的。
谢谢你!答案 0 :(得分:0)
EmbeddedId告诉hibernate在这种情况下该表有一个复合pk vehicleId/tdiId
。
您必须为AssocTransportVehicleDriver
的每个实例设置它
很像其他领域
obj= new AssocTransportVehicleDriver();
obj.setTransportDriverInfo(transportDriverInfo1);
obj.setTransportVehicleInfo(transportVehicleInfo1);
hibernate如何在没有Id的情况下生成insert语句?
它应该是这样的:
obj.setId(new AssocTransportVehicleDriverId(vehicleId,tdiId));