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 クエリを使用して、1 年の特定の月の CommissionSummary を取得します。

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

null でない場合は削除します。

session.delete(existingCommissionSummary);

次に、新しいものを保存します。

于 2012-07-16T07:18:15.563 に答える
0

必要なのは簡単なデータチェックだと思います。
解決策 1:
1. DB からデータをロードし、重複の可能性がないかそれらのデータをチェックします。
2. それらが等しい場合は、古いバージョンを削除します。

解決策 2:
もう 1 つの考えられる解決策は、列を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 に答える