2

ExternalProcessed ファイルを削除したいのですが、同じ ExternalProcessedFileInfo がありますが、このクエリは失敗します。リレーションが @onetomany に戻り、削除時にカスケードされると簡単ですが、ManytoOne リレーションの有用な例が見つかりませんでした。

これは実行したいコードで、 select query に対して実行されます。

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

1 に答える 1

1

DELETE クエリはカスケードを考慮しません。各エンティティとそれをフェッチする必要がありentityManager.remove(..)ます。

于 2011-06-07T14:24:31.410 に答える