这是我的DAO方法:
public void deleteById(int id){
TypedQuery<Animal> query = entityManager.createQuery("Select e from Animal e where e.id="+id, Animal.class);
Animal entity = query.getSingleResult();
System.out.println(entityManager.contains(entity));
System.out.println(entity.hashCode());
entity = entityManager.merge(entity);
System.out.println("after merge");
System.out.println(entity.hashCode());
System.out.println(entityManager.contains(entity));
entityManager.remove(entity);
}
这是我的控制器:
@RequestMapping("{animal}/{name}/{id}/delete")
public String dropAnimal(@PathVariable("id") int id){
animalDAO.deleteById(id);
return "glowny";
}
当我试图删除到对象时,删除分离的实例时出错。
我在合并前后做了sysout,都是false,但我不知道为什么。为什么我的对象仍然是分离的?
在stackTrace之前,我有这样的消息:
KWI21, 2016 10:47:45AMorg.apache.catalina.core.Standard ardWrapperValve在路径[/zapisywacz.baza]抛出异常的上下文中为servlet[mvc-调度器]调用SEVERE: Servlet.service()[请求处理失败;嵌套异常是org.springframework.dao.InvalidDataAccessApiUsageExctive:删除一个分离的实例kaczynski.impl.Cat#1;嵌套异常java.lang.IllegalArgumentExctive:删除一个分离的实例kaczynski.impl.Cat#1]具有根本原因
这是hascode的输出:
false
1870474474
after merge
445252736
false
坚持不懈xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="myDatabase" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="tutorial" />
<property name="javax.persistence.jdbc.password" value="password" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/mojaBaza" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect " />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
动物实体
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Animal {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
private String name;
private int age;
@Column(name="date_of_birth")
private String dateOfBirth;
private double weight;
public Animal(String name, int age, String dateOfBirth, double weight) {
this.name = name;
this.age = age;
this.dateOfBirth = dateOfBirth;
this.weight = weight;
}
public Animal() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(String dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
@Override
public String toString() {
return " id= " + id + " name=" + name + ", age=" + age
+ ", dateOfBirth=" + dateOfBirth + ", weight=" + weight;
}
public String tease() {
return "";
}
public String giveVoice() {
return "";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
合并后,对象从会话中分离出来,要删除它,您必须再次找到它。
TypedQuery<Animal> query = entityManager.createQuery("Select e from Animal e where e.id="+id, Animal.class);
Animal entity = query.getSingleResult();
entityManager.remove(entity);
我找到了解决办法,
在Spring配置中缺少,并且由于注释@Transactional,Spring不可见。
但仍然无法修复。我的目的是当用户在组合框中选择delete选项时,我只想完全删除该行。顺便说一下,removeRow()方法可以在侦听器外部正常工作。下面是代码和说明: 我是不是漏了什么重要的地方?如有任何帮助,我们将不胜感激。
问题内容: 我正在尝试从ArrayList中删除一个对象。每个Item对象都有3个属性;1. itemNum 2.信息3.费用。我也有3个类,即1。Item类定义了存储在目录中的单个项目。2. Catalog类维护Item对象的列表。3带main方法的客户端类。我在Set类中具有设置并获取,在Catalog中具有ArrayList。在客户端中,提示我“输入要删除的itemNum。如何基于对item
我刚加入弹性搜索公司。我正在想办法从ElasticSearch中删除数据。我已经删除了我的索引。然而,这似乎并没有真正删除数据本身。我看到的其他内容指向Delete by Query特性。然而,我甚至不确定该查询什么。我知道我的索引。从本质上说,我想弄清楚如何做一个 来自Chrome版邮递员。但是,我没有什么运气。好像不管我做什么,数据都挂在那里。到目前为止,我已经通过使用PostMan中的DEL
我正在使用Laravel8开发我的项目,现在我想从DB中删除一个数据,所以我添加了这个表单: 下面是实现这一目标的途径: 这是控制器方法: 现在的问题是,它没有工作,我的意思是它抓取正确,但它显示404未找到页面不知怎么的! 而且我也测试了这个: 但仍然显示404 NOT FOUND页面,这意味着进程没有到达控制器方法! 那么我该如何解决这个问题呢? 我非常感谢你们的任何想法或建议... 多谢了。
问题内容: 我有一个具有静态对象ArrayList的ClassA 现在,我要像这样从此列表中删除一个对象 这是用Meteorit类编写的。但是,当我想使用ArrayList中的对象时,它将引发异常。 我使用Iterator从ArrayList中删除对象,但是现在我不知道如何在这种情况下使用它。 问题答案: 这是因为某个线程实际上正在for每个循环中查看此列表,也许您正在尝试在for-each主体中
问题内容: 如果我需要从List中删除一个对象(假设字符串“ abc” linkedList或ArrayList),则可以删除哪一个?(我认为两者都是相同的) ,如果我使用Linkedlist和arraylist,那么时间和空间的复杂度是多少 (我相信两者的时间复杂度都为O(n)相同) 问题答案: 两者都具有相同的时间复杂度-O(n),但是恕我直言,该版本会更快,尤其是在大型列表中,因为当您从数组