最近、EclipsLink 2.0 を使用していたときに、永続オブジェクトの実装でパフォーマンスのボトルネックの問題に遭遇しました。
より具体的には、次の実装を使用していました。
@Entity
@Table(name = "CUSTOMERS")
public class CustomerEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private volatile Long id;
@Column(nullable = false, unique = true)
private String name;
private static final long serialVersionUID = 6952530957072210017L;
private String custGroup;
private String address;
private String nameOfFirstPerson;
private String contactPerson;
private String phone;
private String fax;
private String email;
private String comments;
private String defaultCustomer;
private volatile boolean delayedPaymentAllowed;
private volatile long periodOfDelayedPaymentAllowed;
private volatile boolean restrictionsOnDelayedPayment;
private volatile double maxAmoutPemittedSom;
private volatile double maxAmoutPemittedYE;
private transient String salesPointName;
@Column(length=25483)
private HashMap<String, PriceItem> totalBalance;
@Column(length=25483)
private HashMap<String, PriceItem> totalBalanceUsd;
private transient boolean valueChanged = false;
@OneToMany(mappedBy = "supplier")
private Collection<PurchaseInvoiceEntity> purchaseInvoices;
@OneToMany(mappedBy = "receiver")
private Collection<SalesInvoiceEntity> salesInvoices;
@OneToMany(mappedBy = "payer")
private Collection<PayInSlipEntity> payInSlips;
@OneToMany(mappedBy = "recipient")
private Collection<PaymentOrderEntity> paymentOrders;
@OneToMany(mappedBy = "recipient")
private Collection<WriteOffEntity> writeOffs;
@ManyToOne()
private ResponsiblePersonForDebtEntity responsiblePersonForDebt;
@ManyToOne
private CustomerGroupEntity customerGroup;
public CustomerEntity() {
valueChanged = false;
}
...
}
新しいドキュメントのインスタンスを適切なコレクションに追加するたびに、ドキュメントの新しいインスタンスをテーブルに挿入するときに、ドキュメントの挿入に時間がかかりすぎることがわかりました。netbeans ide 6.9 のプロファイラー モジュールを使用しているときに、この問題に遭遇しました。実際、私はこれらのコレクションを使用して、関連ドキュメントの空をチェックしていました。