需要Hibernate Mapping的帮助
我正在尝试为本地解决方案创建一个仪表板,以收集应用程序服务器的本机性能相关统计信息。 以下是由各种代理收集的数据的DDL。 为了简洁起见,我已经跳过了几列和不相关的表格。
create table server (
id integer not null auto_increment,
name varchar(50) not null,
primary key(id)
);
create table metric (
id integer not null auto_increment,
name varchar(50) not null,
primary key (id)
);
create table server_metric (
id integer not null auto_increment,
server_id integer not null,
metric_id integer not null,
constraint foreign key (server_fk) references server(id),
constraint foreign key (metric_fk) references metric(id),
primary key (id)
);
create table value (
id integer not null auto_increment,
server_metric_id integer not null,
value varchar(500) not null,
collect_time timestamp not null,
constraint foreign key (server_metric_fk) references server_metric(id)
primary key (id)
);
仪表板应允许用户根据这些表中的任何列查看报告作为标准的一部分。 所以我将根据用户的选择生成Hibernate Criteria查询。
当我反向工程POJO时,度量对象看起来像这样:
private long id;
private String name;
private Set serverMetrics = new HashSet(0);
... constructors, getters, setters truncated ...
我想要做的就是将Metric公开为上面这些表关系的单个POJO。 所以基本上你可以通过度量POJO获得服务器的名称,值,时间戳。 这将简单地生成Criteria查询,而结果集将始终是Metric对象的列表。
我提到这个链接 - 这对于对象之间的一对一关系可以很好地工作。 但在我的情况下,度量与server_metric有一对多的关系,等等......我不知道我的Metric表映射文件是如何实现的
任何帮助,将不胜感激...
干杯!!
您的模式在server
和metric
(通过server_metric
表)之间具有多对多关联,该关联本身具有附加属性(值集合)。 Hibernate不支持这种多对多的映射,所以你必须把它们分解成多对一的映射:
@Entity
public class Server {
// id, name getters / setters
}
@Entity
public class Metric {
// id, name getters / setters
}
@Entity
public class ServerMetric {
// id
@ManyToOne
public Server getServer();
@ManyToOne
public Metric getMetric();
@OneToMany(mappedBy = "serverMetric")
public List<Value> getValues();
}
@Entity
public class Value {
// id, value, collect_time
@ManyToOne
public ServerMetric getServerMetric();
}
如果您想要关联是双向的,您可以将适当的@OneToMany声明添加到服务器和度量标准中; 我不确定这是否合乎逻辑。
我相信这太晚了,但对于任何追随者,我不认为你可以将Id作为原始图。
链接地址: http://www.djcxy.com/p/63675.html