0

我们正在使用 Hibernate 生成销售报告。

设想

当用户在输入一些条件后单击生成报告按钮时,我正在使用休眠从数据库中获取数据,然后我们正在做一些数据操作以生成实际的报告数据。报表数据存储在 ArrayList 中,然后将其持久化到 CommissionSummary 表中的数据库中,该表与 hibernate 实体映射如下

CommussionSummary.java

@Column(length=100)
private String advisorName;
private String advisorCodeParent;
@Column(length=100)
private String advisorNameParent;
@Column(length=100)
private String advisorPost;
@Column
private Double percentage;
@Column
private Double diffPercentage;
@Column
private Double saleAmount;
@Column
private Long saleCount;
@Column
private Double commissionAmount;
@Column
private Integer month;
@Column
private Integer year;

每个月都会生成报告。我的问题是:2012 年 7 月 5 日,用户生成了数据,所以我将此信息存储在 CommissionSummary 表中。现在用户在 2012 年 7 月 15 日生成了相同的报告,那么它应该覆盖早先月份的数据。

覆盖标准应该是月份和年份。

4

2 回答 2

0

使用 HQL 查询获取一年中给定月份的 CommissionSummary:

select c from CommissionSummary where c.year = :year and c.month = :month

如果不为空,则将其删除:

session.delete(existingCommissionSummary);

然后保存新的。

于 2012-07-16T07:18:15.563 回答
0

我相信您需要的是简单的数据检查。
解决方案一:
1. 从数据库加载数据并检查这些数据是否存在重复。
2. 如果您发现它们相等,请删除旧版本。

解决方案二:
另一种可能的解决方案是定义您的列unique,因此如果用户想要放置相同的数据,他将收到一些异常。像这样的东西:

@Table(name="TABLE_NAME", uniqueConstraints = {
@UniqueConstraint(columnNames={"advisorName", "advisorNameParent", "advisorPost", "percentage", "diffPercentage" , "saleAmount", "saleCount", "commissionAmount" })

@Column(name = "ADVISOR_NAME", length=100)
private String advisorName;
private String advisorCodeParent;
@Column(name = "ADVISOR_PARENT_NAME", length=100)
private String advisorNameParent;
@Column(name = "ADVISOR_POST" , length=100)
private String advisorPost;
@Column(name = "PERCENTAGE")
private Double percentage;
@Column (name = "DIFF_PERCENTAGE")
private Double diffPercentage;
@Column (name = "SALE_AMOUNT")
private Double saleAmount;
@Column (name = "SALE_COUNT")
private Long saleCount;
@Column (name = "COMMISSION_AMOUNT")
private Double commissionAmount;


使用它,您可以检查是否有一些错误,您可以执行所需的操作。

于 2012-07-16T07:38:16.243 回答