java - Hibernate - 一对多关联

标签 java hibernate

我有两个表,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/

相关文章:

java - Android - 两个类共享首选项

java - 没有仪器注册!必须在注册工具下运行

java - eclipse, java & 从终端运行一个项目

java - 使用 GSON 和 Hibernate 存储任意数据

java - JPA 实体的 JAXB 工厂

java - 两个日历日期之间的时差

java - Hibernate中自动应用字段转换功能

java - 实体字段和数据库表列命名约定的最佳实践

java - 如何在spring Controller 中绑定(bind)来自jsp的对象

java - hibernate ,按 id 或唯一列选择