package com.salesmanager.core.model.catalog.product.review;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import com.salesmanager.core.constants.SchemaConstant;
import com.salesmanager.core.model.catalog.product.Product;
import com.salesmanager.core.model.common.audit.AuditListener;
import com.salesmanager.core.model.common.audit.AuditSection;
import com.salesmanager.core.model.common.audit.Auditable;
import com.salesmanager.core.model.customer.Customer;
import com.salesmanager.core.model.generic.SalesManagerEntity;
@Entity
@EntityListeners(value = AuditListener.class)
@Table(name = "PRODUCT_REVIEW", schema=SchemaConstant.SALESMANAGER_SCHEMA)
public class ProductReview extends SalesManagerEntity<Long, ProductReview> implements Auditable {
private static final long serialVersionUID = -7509351278087554383L;
@Id
@Column(name = "PRODUCT_REVIEW_ID", unique=true, nullable=false)
@TableGenerator(name = "TABLE_GEN", table = "SM_SEQUENCER", pkColumnName = "SEQ_NAME", valueColumnName = "SEQ_COUNT",
pkColumnValue = "PRODUCT_REVIEW_SEQ_NEXT_VAL")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "TABLE_GEN")
private Long id;
@Embedded
private AuditSection audit = new AuditSection();
@Column(name = "REVIEWS_RATING")
private Double reviewRating;
@Column(name = "REVIEWS_READ")
private Long reviewRead;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "REVIEW_DATE")
private Date reviewDate;
@Column(name = "STATUS")
private Integer status;
@ManyToOne
@JoinColumn(name="CUSTOMERS_ID")
private Customer customer;
@OneToOne
@JoinColumn(name="PRODUCT_ID")
private Product product;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "productReview")
private Set<ProductReviewDescription> descriptions = new HashSet<ProductReviewDescription>();
public ProductReview() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Double getReviewRating() {
return reviewRating;
}
public void setReviewRating(Double reviewRating) {
this.reviewRating = reviewRating;
}
public Long getReviewRead() {
return reviewRead;
}
public void setReviewRead(Long reviewRead) {
this.reviewRead = reviewRead;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Set<ProductReviewDescription> getDescriptions() {
return descriptions;
}
public void setDescriptions(Set<ProductReviewDescription> descriptions) {
this.descriptions = descriptions;
}
@Override
public AuditSection getAuditSection() {
return audit;
}
@Override
public void setAuditSection(AuditSection audit) {
this.audit = audit;
}
public Date getReviewDate() {
return reviewDate;
}
public void setReviewDate(Date reviewDate) {
this.reviewDate = reviewDate;
}
}