0

ID で配列リストからデータを削除する際に問題が発生しています。配列リストに本があり、その ID に基づいて特定の本を削除したいと考えています。以下のコードを試しましたが、データが削除されません。

以下のコードを確認し、解決策を提案してください。

更新 このメソッドを呼び出すと、コンパイラは以下のコードをすべて読み取りますが、配列リストからデータを削除しません。エラーは発生しません。

  -------------------
  -------------------
   public String removebookfrmSession()
    {  
        List<Bookdetails> books = new ArrayList<Bookdetails>();
        String bookid = request.getParameter("bkid");    
        Bookdetails book = dao.listBookDetailsById(Integer.parseInt(bookid));
        books = (ArrayList) session.get(BillTransactionBooksConstants.BOK);
        if ( books == null ) books = new ArrayList<Bookdetails>();
        boolean already_exists = false;
        for ( Bookdetails b : books ) 
        {
            if ( Integer.toString(b.getId()).equals(bookid))
            {
                already_exists = true; 
                break;
            }
        }
        if (book != null && already_exists  ) 
        { 
            books.remove(book);
            System.out.println("books size"+books.size()); 
            session.put(BillTransactionBooksConstants.BOK,books);
        }
        return SUCCESS;
    } 

Bookdetails.java (POJO)

        package v.esoft.pojos;

    // Generated Nov 5, 2012 9:37:14 PM by Hibernate Tools 3.4.0.CR1

    import java.util.Date;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import static javax.persistence.GenerationType.IDENTITY;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.persistence.Temporal;
    import javax.persistence.TemporalType;

    /**
     * Bookdetails generated by hbm2java
     */
    @Entity
    @Table(name = "bookdetails", catalog = "vbsoftware")
    public class Bookdetails implements java.io.Serializable {

        private Integer id;
        private String isbn;
        private String bookTitile;
        private String authFirstname;
        private String authLastname;
        private String editionYear;
        private Integer subjectId;
        private Integer coverId;
        private Integer languageId;
        private String publisherName;
        private Integer editionId;
        private Float price;
        private String quantity;
        private String description;
        private Integer locationId;
        private String remarks;
        private String img1;
        private String img2;
        private String videoUrl;
        private Integer createrId;
        private Date createdDate;
        private Integer updateId;
        private Date updatedDate;

        public Bookdetails() {
        }

        public Bookdetails(String isbn, String bookTitile, String authFirstname,
                String authLastname, String editionYear, Integer subjectId,
                Integer coverId, Integer languageId, String publisherName,
                Integer editionId, Float price, String quantity,
                String description, Integer locationId, String remarks,
                String img1, String img2, String videoUrl, Integer createrId,
                Date createdDate, Integer updateId, Date updatedDate) {
            this.isbn = isbn;
            this.bookTitile = bookTitile;
            this.authFirstname = authFirstname;
            this.authLastname = authLastname;
            this.editionYear = editionYear;
            this.subjectId = subjectId;
            this.coverId = coverId;
            this.languageId = languageId;
            this.publisherName = publisherName;
            this.editionId = editionId;
            this.price = price;
            this.quantity = quantity;
            this.description = description;
            this.locationId = locationId;
            this.remarks = remarks;
            this.img1 = img1;
            this.img2 = img2;
            this.videoUrl = videoUrl;
            this.createrId = createrId;
            this.createdDate = createdDate;
            this.updateId = updateId;
            this.updatedDate = updatedDate;
        }

        @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "id", unique = true, nullable = false)
        public Integer getId() {
            return this.id;
        }

        public void setId(Integer id) {
            this.id = id;
        }

        @Column(name = "isbn", length = 90)
        public String getIsbn() {
            return this.isbn;
        }

        public void setIsbn(String isbn) {
            this.isbn = isbn;
        }

        @Column(name = "book_titile")
        public String getBookTitile() {
            return this.bookTitile;
        }

        public void setBookTitile(String bookTitile) {
            this.bookTitile = bookTitile;
        }

        @Column(name = "auth_firstname", length = 120)
        public String getAuthFirstname() {
            return this.authFirstname;
        }

        public void setAuthFirstname(String authFirstname) {
            this.authFirstname = authFirstname;
        }

        @Column(name = "auth_lastname", length = 120)
        public String getAuthLastname() {
            return this.authLastname;
        }

        public void setAuthLastname(String authLastname) {
            this.authLastname = authLastname;
        }

        @Column(name = "edition_year", length = 20)
        public String getEditionYear() {
            return this.editionYear;
        }

        public void setEditionYear(String editionYear) {
            this.editionYear = editionYear;
        }

        @Column(name = "subject_id")
        public Integer getSubjectId() {
            return this.subjectId;
        }

        public void setSubjectId(Integer subjectId) {
            this.subjectId = subjectId;
        }

        @Column(name = "cover_id")
        public Integer getCoverId() {
            return this.coverId;
        }

        public void setCoverId(Integer coverId) {
            this.coverId = coverId;
        }

        @Column(name = "language_id")
        public Integer getLanguageId() {
            return this.languageId;
        }

        public void setLanguageId(Integer languageId) {
            this.languageId = languageId;
        }

        @Column(name = "publisher_name", length = 70)
        public String getPublisherName() {
            return this.publisherName;
        }

        public void setPublisherName(String publisherName) {
            this.publisherName = publisherName;
        }

        @Column(name = "edition_id")
        public Integer getEditionId() {
            return this.editionId;
        }

        public void setEditionId(Integer editionId) {
            this.editionId = editionId;
        }

        @Column(name = "price", precision = 12, scale = 0)
        public Float getPrice() {
            return this.price;
        }

        public void setPrice(Float price) {
            this.price = price;
        }

        @Column(name = "quantity", length = 40)
        public String getQuantity() {
            return this.quantity;
        }

        public void setQuantity(String quantity) {
            this.quantity = quantity;
        }

        @Column(name = "description", length = 65535)
        public String getDescription() {
            return this.description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        @Column(name = "location_id")
        public Integer getLocationId() {
            return this.locationId;
        }

        public void setLocationId(Integer locationId) {
            this.locationId = locationId;
        }

        @Column(name = "remarks", length = 65535)
        public String getRemarks() {
            return this.remarks;
        }

        public void setRemarks(String remarks) {
            this.remarks = remarks;
        }

        @Column(name = "img1")
        public String getImg1() {
            return this.img1;
        }

        public void setImg1(String img1) {
            this.img1 = img1;
        }

        @Column(name = "img2")
        public String getImg2() {
            return this.img2;
        }

        public void setImg2(String img2) {
            this.img2 = img2;
        }

        @Column(name = "video_url", length = 65535)
        public String getVideoUrl() {
            return this.videoUrl;
        }

        public void setVideoUrl(String videoUrl) {
            this.videoUrl = videoUrl;
        }

        @Column(name = "creater_id")
        public Integer getCreaterId() {
            return this.createrId;
        }

        public void setCreaterId(Integer createrId) {
            this.createrId = createrId;
        }

        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "created_date", length = 19)
        public Date getCreatedDate() {
            return this.createdDate;
        }

        public void setCreatedDate(Date createdDate) {
            this.createdDate = createdDate;
        }

        @Column(name = "update_id")
        public Integer getUpdateId() {
            return this.updateId;
        }

        public void setUpdateId(Integer updateId) {
            this.updateId = updateId;
        }

        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "updated_date", length = 19)
        public Date getUpdatedDate() {
            return this.updatedDate;
        }

        public void setUpdatedDate(Date updatedDate) {
            this.updatedDate = updatedDate;
        }

    }
4

2 に答える 2

2

メソッドを使用するにはBookdetails、クラスがメソッドを実装する必要があります。それ以外の場合は、@ juergendで指定されているように、オブジェクトの削除を自分で処理する必要があります。public boolean equals(Object o)List#remove(Object o)

メソッドの実装は次のequalsようになります。

public class Bookdetails {
    private int id;
    //other attributes and methods...

    @Override
    public boolean equals(Object o) {
        if (o instanceof Bookdetails) {
            Bookdetails oBookdetails = (Bookdetails)o;
            return (this.id == oBookdetails.id);
        }
        return false;
    }
}

これで、ループbooks.remove(book);がなくても機能します。for ( Bookdetails b : books )

于 2012-11-11T17:42:56.650 に答える
1

デフォルトの等価性は に基づいているため、 からの参照referenceに割り当てる必要があります。これが機能するようにします。またはオーバーライドできますが、同等性を提供できるかどうかはよくわかりませんbooklistremoveequalsbookId

for ( Bookdetails b : books ) 
{
    if ( Integer.toString(b.getId()).equals(bookid))
    {
        already_exists = true;
        book= b; 
        break;
    }
}

remove次に、参照の等価性のために呼び出すと、削除されますbook

アップデート:

その POJO とあなたが持っている場合は、それに対してprimary keyequals を簡単に実装できます。リストを反復処理する必要はありません。primary keyid

于 2012-11-11T17:47:08.557 に答える