package org.multibit.mbm.core.model;
import org.multibit.mbm.utils.ObjectUtils;
import javax.persistence.*;
import java.io.Serializable;
/**
* <p>DTO to provide the following to the application</p>
* <ul>
* <li>Provision of persistent state</li>
* </ul>
* <p>A Customer describes the minimum information required to describe an entity capable of making purchases</p>
* <p>Note that digital purchases may not have a delivery address associated with them, nor an email address to provide
* confirmation.</p>
*/
@Entity
@Table(name = "customers")
public class Customer implements Serializable {
private static final long serialVersionUID = 38947590324750L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id = null;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="cart_fk")
private Cart cart;
/**
* A Customer has a single User
*/
@OneToOne(mappedBy = "customer")
private User user = null;
/*
* Default constructor required for Hibernate
*/
public Customer() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
/**
* @return The shopping Cart associated with this Customer (if present)
*/
public Cart getCart() {
return cart;
}
public void setCart(Cart cart) {
this.cart = cart;
}
/**
* @return The User associated with this Customer
*/
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Customer other = (Customer) obj;
return ObjectUtils.isEqual(
id, other.id
);
}
@Override
public int hashCode() {
return ObjectUtils.getHashCode(id);
}
@Override
public String toString() {
return String.format("Customer[id=%s]]", id);
}
}