当前位置: 首页 > 知识库问答 >
问题:

如何使用Hibernate注释为特定条件使用Hibernate覆盖表数据?

陈誉
2023-03-14

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

脚本

当用户在输入一些条件后点击生成报告按钮时,我正在使用Hibernate状态从数据库中获取数据,然后我们正在进行一些数据操作以生成实际的报告数据。报告数据存储在ArrayList中,然后保存到与Hibernate实体映射的数据库中,如下图所示

CommusionSummary。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日生成了相同的报告,那么它应该覆盖上个月的数据。

覆盖标准应为月份和年份。

共有2个答案

惠洛华
2023-03-14

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

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

如果不为空,请删除它:

session.delete(existingCommissionSummary);

然后保存新的。

楚宏胜
2023-03-14

我相信您需要的是一个简单的数据检查。解决方案一:
1.从数据库中加载数据,并检查这些数据是否可能重复。
2.如果您发现它们相等,请删除旧版本。解决方案二:
另一个可能的解决方案是定义您的列唯一的,因此如果用户想要将相同的数据,他将收到一些异常。类似于这样:

@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;


使用这个,你可以检查是否有一些错误,你可以做你想要的动作。

 类似资料:
  • 问题内容: 我正在考虑使用注释来定义我的Hibernate映射,但是遇到了一个问题:我想使用基础实体类来定义公共字段(包括ID字段),但是我希望不同的表具有不同的ID生成策略: 有什么办法可以做到这一点?我曾尝试将以下内容包含进来,但hibernate状态是我两次反对同一栏,这似乎是错误的: 问题答案: 在上面的代码中,您似乎在混合字段(超类)和方法(子类)的注释。Hibernate 参考文档建议

  • 我正在使用Hibernate注释,我试图解决的问题如下: 我需要有2个不同的@Entity类具有相同的列映射,但具有不同的标识符。 第一个应该使用id作为标识符。 第二个应使用名称作为标识符。 因此,我有一个抽象类,用@MappedSuperclass进行注释,这些@MappedSuperclass具有包括id和name在内的所有列,此外还有2个@Entity类,这些类扩展了超类并覆盖了id和na

  • 我想使用联接表在两个表之间建立一对多关系。 这就是为什么我想使用联接表: Hibernate单向一对多关联-为什么连接表更好 最后,我想使用Hibernate注释来执行此操作。 我找到了一些使用xml映射实现这一点的示例,但没有使用注释。 我相信这将是如何创建表需要

  • 问题内容: 所以我对数据库中的某些表进行了反向工程,当我尝试将对象保存到数据库中时,出现以下错误: 初始SessionFactory创建失败。org.hibernate.AnnotationException:从com.mycode.Account引用com.mycode.Block的外键具有错误的列数。在线程“ main”中应为2异常java.lang.ExceptionInInitialize

  • 问题内容: 我使用我的uuid如下: 但是我收到了一个聪明的Hibernate警告: 使用org.hibernate.id.UUIDHexGenerator不会生成符合IETF RFC 4122的UUID值;考虑改用org.hibernate.id.UUIDGenerator 所以我想切换到,现在我的问题是如何将其告知Hibernate的生成器。我看到有人用它作为“hibernateuuid”-这

  • 问题内容: 我试图用来向没有定义主键的表中插入数据。 但是事实是该表的两个字段一起在表中是唯一的。我如何使用hibernate注释实现相同的目的? 这是我的代码。 问题答案: 您可以使用和创建复合键,并将其与您的实体进行映射。例如: 然后在Java代码中使用常规方式来持久化实体。 参考:http : //docs.jboss.org/hibernate/annotations/3.5/refere