我有两个表,ComputerNode 和 Connection。 ComputerNode 有一个主键 nodeid
但 Connection 没有。我无法修改表架构。如果 java POJO 具有一对多关系,我应该如何创建它们?基本上我的目标是像这样进行内部连接:
select * from `ComputerNode` cn inner join `Connection` c on cn.nodeid = c.nodeid
以下是 SQL 表架构。 计算机节点表:
int nodeid <primary key>;
varchar nodename;
连接表:
int nodeid <not primary key>;
varchar connstatus;
表之间的关系是一对多的。一个计算机节点可以有多个连接
我已经创建了两个 Java POJO 类,但我不太确定所需的注释。我已阅读 hibernate 教程,但没有看到有关没有标识符的类的解释(即:连接)。
ComputerNode.java:
@Entity
@Table(name="ComputerNodes")
public class ComputerNode {
@Id
@Column(name="nodeid")
private int nodeId;
@Column(name="nodename")
private String nodeName;
@OneToMany
private Set<Connection> connections;
.... //getter and setters
}
连接.java
//What annotation should i use since this class doesn't have identifier?
public class Connection {
@Column(name="nodeid")
private int nodeId;
@Column(name="connstatus")
private String connStatus;
}
Connection 应该是什么类型的类? @可嵌入? 我应该怎么做才能在两个类之间创建一对多关系?
================
更新
public List<ComputerNode> getComputerNodes() {
//the query to inner join is:
return sessionFactory.getCurrentSession().createQuery("from ComputerNode as node inner join Connection as conn").list();
}
for (ComputerNode cn : getComputerNodes) {
System.out.println(cn.getNodeId() + ',' + cn.getNodeName());
for (Connection c : cn.getConnections) {
System.out.println(c.getConnStatus());
}
}
最佳答案
试试这个:
@Entity
@Table(name="ComputerNode")
public class ComputerNode {
@Id
@Column(name="nodeid")
private int nodeId;
@Column(name="nodename")
private String nodeName;
@OneToMany(mappedBy="computerNode")
private Set<Connection> connections;
.... //getter and setters
}
连接:
@Entity
@Table(name="Connection")
public class Connection {
@ManyToOne
@JoinColumn(name="nodeid")
private ComputerNode computerNode;
...
}
如果连接表没有任何主键,请检查此解决方案:Hibernate and table without PK
==========
已更新
如果您想选择 ComputerNode 实体,请使用以下查询:
sessionFactory.getCurrentSession().createQuery("从ComputerNode中选择节点作为节点").list();
关于java - Hibernate - 一对多关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27184424/