1
我有一個傳統的數據庫設計有兩個實體春天開機多對一與非鍵連接不工作
@Entity
@Table(name = "tblRouters")
public class Router implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "nRouterID")
private Integer routerId;
@Column(name = "strRouterName")
private String routerName;
@Column(name = "strRouterIP")
private String routerIp;
@Column(name = "strLastAutomaticCheckTime")
private String lastCheckTime;
@Column(name = "nSupportedSnmpVersion")
private String protocol;
@OneToMany(fetch =FetchType.EAGER)
@JoinColumn(name="strIpAddr", referencedColumnName="strRouterIP")
//@JoinColumn(name="strIpAddr")
private Set<RouterDetail> routerDetails;
cons, getters setters....
和RouterDetail類列
@Entity
@Table(name = "tblRouter_Detail")
public class RouterDetail implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "nObjectId")
private Integer objectId;
@Column(name = "cObjectType")
private Character objectType;
@Column(name = "strSysName")
private String systemName;
@Column(name = "strDescription")
private String systemDescription;
@ManyToOne()
@JoinColumn(name="strRouterIP")
private Router router;
經過一番掙扎後,我設法創建正確的映射允許我在使用Router類中的@JoinColumn中的referencedColumnName之後執行查詢,但是我需要查詢是熱切地獲取數據,所以我去改變了這個(在Router類上)
@OneToMany()
到
@OneToMany(fetch =FetchType.EAGER)
這打破了我的代碼以下情況例外
產生的原因:com.microsoft.sqlserver.jdbc.SQLServerException:無效 列名 'strRouterIP'。
即時通訊使用的彈簧引導1.5.3這個接口來執行查詢
public interface RouterService extends CrudRepository<Router, Integer> {
public Iterable<Router> findAllByRouterDetailsObjectType(Character objectType);
}
什麼是錯的這個映射?
嘗試參考,而不是實際的列名Bean的參數的名稱來解決這個問題。我的意思是說更改代碼,如@ManyToOne() @JoinColumn(name =「strRouterIP」) 專用路由器路由器;到@ManyToOne() @JoinColumn(name =「routerIp」) 專用路由器路由器; – Afridi
@afridi謝謝我試圖按照你的建議去做,但我得到了「無效的列名'routerIp'」 – naoru