简体   繁体   中英

LEFT JOIN table mapping in hibernate

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.websystique.springmvc.model.AssetMakeMaster#0]

I have two entities are as follows: 1. AssetMaster 2. AssetMakeMaster

Above entities are mapped with tables. I want to use left join for above two entities and get the all the data from AssetMaster. Inner query is working fine for above entities but i want get the non matched values also. I have tried but not getting solution yet. Please anyone will give the solution for my problem.

I have tried the below query in mysql it gives me proper result but i want to get result from hibernate entities. Please give me solution for below query:

SELECT * FROM fscassets.asset_master a left join fscassets.asset_make_master b on a.make=b.id;

 /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package > > /** * * @author Amol */ @Entity @Table(name = "asset_master") public class AssetMaster implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "make", nullable = false) private int make; @Column(name = "serialno", nullable = false) private String serialno; @Column(name = "specs", nullable = false) private String specs; @Column(name = "model", nullable = false) private String model; @Column(name = "quantity", nullable = false) private int quantity; @Column(name = "purchasedate", nullable = false) private String purchasedate; @Column(name = "created_on", nullable = false) private String createdOnDate; @Column(name = "remark", nullable = false) private String remark; @Column(name = "ipaddress", nullable = false) private String ipAddress; @ManyToOne(cascade = CascadeType.ALL) @Fetch(FetchMode.SELECT) @JoinColumn(name = "make", updatable = false, insertable = false) private AssetMakeMaster assetMakeMasterdata; public AssetMakeMaster getAssetMakeMasterdata() { return assetMakeMasterdata; } public void setAssetMakeMasterdata(AssetMakeMaster assetMakeMasterdata) { this.assetMakeMasterdata = assetMakeMasterdata; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCreatedOnDate() { return createdOnDate; } public void setCreatedOnDate(String createdOnDate) { this.createdOnDate = createdOnDate; } public String getIpAddress() { return ipAddress; } public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } public int getMake() { return make; } public void setMake(int make) { this.make = make; } public String getSerialno() { return serialno; } public void setSerialno(String serialno) { this.serialno = serialno; } public String getSpecs() { return specs; } public void setSpecs(String specs) { this.specs = specs; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } public String getPurchasedate() { return purchasedate; } public void setPurchasedate(String purchasedate) { this.purchasedate = purchasedate; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } 

}

 /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package > > /** * * @author Amol */ 

@Entity @Table(name = "asset_make_master") public class AssetMakeMaster implements Serializable {

 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @NotEmpty @Column(name = "asset_make_name", unique = true, nullable = false) private String assetmakename; @Column(name = "assetgroup", nullable = false) private int groupid; @Column(name = "created_on", nullable = false) private String createdOnDate; @Column(name = "ipaddress", nullable = false) private String ipAddress; @ManyToMany(cascade = CascadeType.ALL, mappedBy = "assetMakeMasterdata") private List<AssetMaster> assetMakeMasters = new ArrayList<AssetMaster>(); public List<AssetMaster> getAssetMakeMasters() { return assetMakeMasters; } public void setAssetMakeMasters(List<AssetMaster> assetMakeMasters) { this.assetMakeMasters = assetMakeMasters; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getAssetmakename() { return assetmakename; } public void setAssetmakename(String assetmakename) { this.assetmakename = assetmakename; } public int getGroupid() { return groupid; } public void setGroupid(int groupid) { this.groupid = groupid; } public String getCreatedOnDate() { return createdOnDate; } public void setCreatedOnDate(String createdOnDate) { this.createdOnDate = createdOnDate; } public String getIpAddress() { return ipAddress; } public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } } 

You can't use (*) in HQL query. If you want non matched values also then select that columns individually you will get values.

问题在于您正在获取已设置AssetMakeMaster ID的AssetMaster,但具有设置ID的AssetMakeMaster不再存在于数据库中。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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