我有一个 POJO 映射到特定表中的一行。该行描述了某个站点中的图像,并包含宽度、高度、url、某种状态和更多字段等数据。在一些遗留代码中,我有一个hibernate
返回 url 和状态的查询 (in)。这些数据被封装在一个类ImageStatusAndOrigFilename
中。
我认为这是一个坏主意,因为:
- 如果明天我需要查询其他字段怎么办?名称与数据过于耦合。
- 过去获取图像宽度和高度的唯一方法是解析 url。今天我们在数据库中映射宽度和高度,因此我现在需要获取图像大小和状态(我不再关心原始文件名)。所以我需要改变这个类,但不能,因为它正在代码的其他地方使用。我希望得到一些更通用的东西,它不与特定场景耦合,并且可以在需要时进行扩展。
我试图弄清楚要使用哪种数据结构。我是否应该使用具有所有字段但将其中一些字段保留为空的原始 POJO(我不想查询所有字段,因为在这种情况下我不需要所有字段)。我应该为这个特定查询创建另一个 POJO(当然有更好的名称)吗?
当然也欢迎任何其他建议。
编辑:
POJO:
@Entity
@Table(name = "web_image")
public class WebImage {
private long id;
private Document document;
private Integer mediaType;
private Integer width;
private Integer height;
private Date creationDate;
private Date modificationDate;
private String origUrl;
private ImageStatus status;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
public Long getId() {
return id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "document_id")
public Document getDocument() {
return document;
}
public void setDocument(final OBDocument document) {
this.document = document;
}
@Column(name = "width")
public Integer getWidth() {
return width;
}
public void setWidth(final Integer width) {
this.width = width;
}
// Other getters and setters for the rest of the private fields
}
查询:
SELECT b.document_id , b.status , b.orig_file_id, a.min_id 作为 id FROM web_image b, ( SELECT x.document_id, MAX(x.id) max_id, MIN(x.id) min_id FROM web_image x WHERE x.document_id在 ( :docs ) GROUP BY x.document_id) a WHERE a.max_id = b.id