2011-06-07 95 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