【发布时间】:2015-01-26 20:42:50
【问题描述】:
我有两个表,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 类,但我不确定所需的注释。我已经阅读了休眠教程,但我没有看到没有标识符的类的解释(即:连接)。
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
}
Connection.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());
}
}
【问题讨论】:
-
你试过
@Id注解吗? -
@Id 仅适用于实体类。但是连接不能是实体可以吗?
-
连接应该只是实体。我认为您在 Connection Entity 类中使用
@Id的那一列应该有外键。