/*******************************************************************************
 * Copyright (c) 2011, 2012 Oracle and/or its affiliates. All rights reserved.
 * This program and the accompanying materials are made available under the 
 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
 * which accompanies this distribution. 
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at 
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *      Oracle - initial impl
 ******************************************************************************/
package model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.*;

import org.eclipse.persistence.annotations.HashPartitioning;
import org.eclipse.persistence.annotations.Partitioned;
import org.eclipse.persistence.annotations.ReplicationPartitioning;

/**
 * Customer, hash partitioned by Id.
 * @author James Sutherland
 */
@Entity
@Table(name="PART_CUSTOMER")
@ReplicationPartitioning(name="Replicate", connectionPools={"default","node2"})
@HashPartitioning(name="HashPartitionById", partitionColumn=@Column(name="ID"), connectionPools={"default","node2"})
@Partitioned("HashPartitionById")
public class Customer implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.TABLE)
    private long id;
    @Basic
    private String name;
    @OneToMany(mappedBy="customer")
    private List<Order> orders = new ArrayList<Order>();

    public Customer() {
    }

    public long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Order> getOrders() {
        return orders;
    }

    public void setOrders(List<Order> orders) {
        this.orders = orders;
    }
    
    public void addOrder(Order order) {
        order.setCustomer(this);
        getOrders().add(order);
    }
}
