编辑:糟糕,我想如果发布删除代码会有所帮助。抱歉。
// delete from permanent store and local list
int index = get_record_to_delete();
if (entityList.getEntities().get(index).getEntityId() != null ) {
// existing persisted record
entityService.delete(entityInfo.getEntities().get(index).getEntityId());
}
//remove from local list
entityList.getEntities().remove(index);
return ownersInfo;
// entityService called by above code
public void delete(MyEntity entity) {
repository.delete(entity); // subclass of org.springframework.data.jpa.repository.JpaRepository
}
我正在使用Spring Data / JPA V 1.4.2.RELEASE和hibernate3.6.10.Final。
我遇到的情况是删除一个实体,删除似乎可以正常工作,但是当我刷新网页时,该实体会重新出现。因此,它不会产生错误,但不会删除记录。
该实体中包含子实体。我怀疑某种实体依赖问题会阻止实体真正被“删除”,但我不知道它可能是哪种实体依赖,而且Hibernate并未告诉我。所包含的实体是否被删除并不重要,但是该实体需要被删除。不知道为什么没有发生。这是我要删除的实体:
public class MyEntity implements java.io.Serializable {
@Id
@GeneratedValue
@Column(name = "MYID", unique = true, nullable = false)
private Long myId;
@Column(name = "MY_NAME", nullable = false, length = 50)
private String myName;
@ManyToOne
@JoinColumn(name = "ADDRESS_ID", nullable = false)
private AddressEntity myAddress;
@ManyToOne
@JoinColumn(name = "OTHER_ADDRESS_ID", nullable = true)
private AddressEntity myOtherAddress;
@ManyToOne
@JoinColumn(name = "TYPE_CODE", nullable = false)
private MyType myType;
@ManyToOne
@JoinColumn(name = "ADDRESS_CODE", nullable = false)
private AddressCode addressCode;
@Column(name = "OTHER", nullable = false, precision = 3, scale = 0)
private Integer myOther;
@ManyToOne
@JoinColumn(name = "PARENT_ID", nullable = false)
private MyParent parent;
@Column(name = "PHONE", nullable = false, precision = 10, scale = 0)
private Long myPhone;
@Column(name = "SOCIAL", nullable = false, length = 9)
private String mySocial;
}
任何人看到的任何东西都可能暗示为什么该实体不会删除?
原来是Hibernate @OneToMany批注取消删除的情况。
因为父对象上面有@OneToMany(cascade=CascadeType.ALL)
注释,所以:
Class MyParent {
@OneToMany(cascade=CascadeType.ALL)
Set<MyObject> myObjects;
}
Hibernate显然遍历了整个对象图,由于某种原因,由于没有删除此 父级 ,因此它取消了 子级 删除。
要检测到这一点,您需要将日志记录一路转到最新状态,TRACE
并从Hibernate查找以下消息:
un-scheduling entity deletion
这些是让您知道Hibernate正在取消删除的神奇词汇。这没有特别有据可查的,所以我希望这对其他人有帮助。
我们有一个Kafka流聚合拓扑。我们需要控制changeLog主题的大小,以减少Kafka存储成本。因此,我们在拓扑中使用transformer(DSL API)调度标点符号,该标点符号使用KeyValueStore.delete()从stateStore中删除旧记录。 我能够验证在删除之后,在进一步调度的标点符号触发器中,删除的键不在状态存储中。但是它是否也会从changeLog主题中删除该记录
EventLicensetype.hbm.xml文件: 下面是EventInfo类。同样,在实际文件中有更多的字段,这只是重要的部分: 下面是EventLicenseType类 为什么它不能直接删除记录?为什么它要更新??我还尝试将代码更改为下面的代码,并得到相同的错误。 谁能帮我解决我缺少的东西,或者给我指明正确的方向?
删除记录命令用于从数据库中完全删除一个或多个记录。 以下语句是命令的基本语法。 以下是有关上述语法中选项的详细信息。 - 指定如何锁定加载和更新之间的记录。有两个选项来指定默认和记录。 - 指定要返回的表达式而不是记录数。 - 定义要更新的最大记录数。 - 定义在超时之前允许更新运行的时间。 注 - 请勿使用删除“顶点”或“边”,因为它会影响图的完整性。 示例 让我们考虑在前一章中创建的表。 编号
RemoveResult remove(RemoveRequest request) 功能 删除某个表的一条记录,可以删除全部或者部分属性,也可以指定条件,当条件成立时才删除成功 消耗一个单位写配额,如果带了条件,还消耗一个单位读配额(另外如果创建了EAGER类型的二级索引,每个Eager二级索引需要1个额外读配额) 方法参数 request : RemoveRequest : required
我使用的是JBoss,因此需要排除JBoss自己的日志子系统,以便进行日志记录,我使用的是jboss-deployment-structure.xml文件: 我使用的是JPA,因此如果这可能有所帮助,这是我的persistence.xml文件:
本章提供了有关如何使用JDBC应用程序从表中删除记录的示例。 在执行以下示例之前,请确保您已满足以下条件 - 要执行以下示例,您可以使用实际用户名和密码替换用户名和密码。 您的MySQL或您使用的任何数据库已启动并正在运行。 所需的步骤 (Required Steps) 使用JDBC应用程序创建新数据库需要以下步骤 - Import the packages:要求包含包含数据库编程所需的JDBC类