我有一个包含两个实体的旧数据库设计
@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 中使用引用的ColumnName 后执行查询,但是我需要查询急切地获取数据,所以我去更改了这一点(在 Router 类上)
@OneToMany()
至
@OneToMany(fetch =FetchType.EAGER)
这破坏了我的代码,但出现以下异常
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid column name 'strRouterIP'.
我使用 spring boot 1.5.3 和此接口(interface)来执行查询
public interface RouterService extends CrudRepository<Router, Integer> {
public Iterable<Router> findAllByRouterDetailsObjectType(Character objectType);
}
这个映射有什么问题?
最佳答案
我能够通过将 RouterDetail join 列修改为此来解决此问题
@JoinColumn(name ="strIpAddr", referencedColumnName="strRouterIP")
关于hibernate - 带有非键连接列的 Spring boot 多对一不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45235126/