簡體   English   中英

在hibernate中LEFT JOIN表映射

[英]LEFT JOIN table mapping in hibernate

org.springframework.web.util.NestedServletException:請求處理失敗; 嵌套異常是org.hibernate.ObjectNotFoundException:不存在具有給定標識符的行:[com.websystique.springmvc.model.AssetMakeMaster#0]

我有兩個實體如下:1。AssetMaster 2. AssetMakeMaster

上面的實體與表映射。 我想對上面兩個實體使用左連接,並從AssetMaster獲取所有數據。 內部查詢對上面的實體工作正常,但我也希望得到非匹配的值。 我試過但還沒有得到解決方案。 請有人為我的問題提供解決方案。

我在mysql中嘗試了下面的查詢它給了我正確的結果,但我想從hibernate實體得到結果。 請給我以下查詢的解決方案:

SELECT * FROM fscassets.asset_master在a.make = b.id上左連接fscassets.asset_make_master b;

 /* * 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”)公共類AssetMakeMaster實現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; } } 

您不能在HQL查詢中使用(*)。 如果您還需要非匹配值,則單獨選擇這些列,您將獲得值。

問題在於您正在獲取已設置AssetMakeMaster ID的AssetMaster,但具有設置ID的AssetMakeMaster不再存在於數據庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM