2011-06-07 92 views
2

我想删除ExternalProcessed文件具有相同的ExternalProcessedFileInfo但这个查询失败。很容易,当关系恢复到@onetomany和级联删除,但我没有找到ManytoOne关系的任何有用的例子。JPA manytoone关系删除操作

这是我想运行的代码,它将运行选择查询。

javax.persistence.Query query =this. manager.createQuery("Delete from ExternalProcessedFile " 
       + " f WHERE f.processInfo.source.name= :source "); 
      query.setParameter("source",source.getName()) ; 
      EntityTransaction tran= manager.getTransaction(); 
      try{ 
      tran.begin(); 
      query.executeUpdate(); 
      tran.commit();  

@Entity 
@Table(name = "ProcessedFile") 

public class ExternalProcessedFile implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "EID") 
    private Long id; 


    @NotNull 
    @ManyToOne 
    private ExternalProcessedFileInfo processInfo; 

@Entity 
@Table(name = "ProcessedFileInfo") 
public class ExternalProcessedFileInfo implements Serializable { 

    public ExternalProcessedFileInfo(){ 

    } 
    public ExternalProcessedFileInfo(String processtime,ExternalDataStorage source){ 
     this.processTime=processtime; 
     this.source=source; 
    } 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "EID") 
    private Long id; 


    @ManyToOne 
    @JoinColumn 
    private ExternalDataStorage source; 


    @NotEmpty 
    @Column(name = "processtime") 
    private String processTime; 

回答

1

DELETE查询不采取瀑布考虑。你将不得不取得每个实体和entityManager.remove(..)它。

+0

这是什么意思不采取级联考虑。我不期望删除ExternalProcessedFile也删除ExternalProcessedFileInfo。我只想删除一组ExternalProcessedFileInfo的ExternalProcessedFileInfo属性 – ayengin 2011-06-07 14:51:04

+0

也许查询失败,因为违反约束。您应该删除子实体。 – Bozho 2011-06-07 14:54:01

+0

我想从外部处理文件中删除关系的所有者一方的记录,我认为它是chield.And异常说Sql语法异常。 – ayengin 2011-06-07 18:57:52