package com.syzton.sunread.model.book; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.PrePersist; import javax.persistence.PreUpdate; import javax.persistence.Table; import org.hibernate.annotations.Type; import org.joda.time.DateTime; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.syzton.sunread.model.common.AbstractEntity; import com.syzton.sunread.util.DateSerializer; /** * @author Jerry zhang */ @Entity @Table(name="book") @JsonIgnoreProperties(value = {"reviews"}) public class Book extends AbstractEntity{ public static final int MAX_LENGTH_DESCRIPTION = 500; public static final int MAX_LENGTH_NAME = 50; public static final int MAX_LENGTH_ISBN = 16; public static final int MAX_LENGTH_AUTHOR = 80; public static final int MAX_LENGTH_PUBLISHER = 50; public static final int MAX_LENGTH_AUTHOR_INTRODUCTION =256; public static final int MAX_LENGTH_CATALOGUE =1000; public static final int DEFAULT_POINT = 5; public static final int DEFAULT_COIN = 5; private static final String DEFAULT_PICTURE_URL = "ftp://default_book_picture" ; public Book() { } @Column(nullable = true, length = MAX_LENGTH_DESCRIPTION) private String description; @JsonSerialize(using = DateSerializer.class) @Column(nullable = false) @Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime") private DateTime modificationTime; @JsonSerialize(using = DateSerializer.class) @Column(nullable = false) @Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime") private DateTime publicationDate; @Column(name="name",nullable = false,length = MAX_LENGTH_NAME) private String name; @Column(name ="isbn",unique = true,nullable = false,length = MAX_LENGTH_ISBN) private String isbn; @Column(nullable = false,length = MAX_LENGTH_AUTHOR) private String author; @Column(nullable = false,length = MAX_LENGTH_AUTHOR_INTRODUCTION) private String authorIntroduction; @Column(nullable = false,length = MAX_LENGTH_PUBLISHER) private String publisher; private float price; private float highPrice; private int evaluationNum; private int pageCount; private int wordCount; private int point = DEFAULT_POINT; private int coin = DEFAULT_COIN; private int avgRate; @Column(length = MAX_LENGTH_CATALOGUE) private String catalogue; @Enumerated(EnumType.STRING) private Binding binding = Binding.softback; @Enumerated(EnumType.STRING) private Status status = Status.valid; private String pictureUrl = DEFAULT_PICTURE_URL; @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER,optional = false) @JoinColumn(name ="extra_id") private BookExtra extra; @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER,optional = false) @JoinColumn(name ="book_statistic_id") private BookStatistic statistic = new BookStatistic(); @OneToMany(cascade = CascadeType.ALL,mappedBy = "book") private Set<Review> reviews = new HashSet<>() ; public enum Status { valid,invalid } @PrePersist public void prePersist() { super.prePersist(); DateTime now = DateTime.now(); modificationTime = now; } @PreUpdate public void preUpdate() { modificationTime = DateTime.now(); } public int getAvgRate() { return avgRate; } public void setAvgRate(int avgRate) { this.avgRate = avgRate; } public String getDescription() { return description; } public DateTime getModificationTime() { return modificationTime; } public void setDescription(String description) { this.description = description; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIsbn() { return isbn; } public Set<Review> getReviews() { return reviews; } public void setCreationTime(DateTime creationTime) { this.creationTime = creationTime; } public void setModificationTime(DateTime modificationTime) { this.modificationTime = modificationTime; } public void setIsbn(String isbn) { this.isbn = isbn; } public void setReviews(Set<Review> reviews) { this.reviews = reviews; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getPublisher() { return publisher; } public void setPublisher(String publisher) { this.publisher = publisher; } public int getPoint() { return point; } public void setPoint(int point) { this.point = point; } public int getCoin() { return coin; } public void setCoin(int coin) { this.coin = coin; } public String getPictureUrl() { return pictureUrl; } public void setPictureUrl(String pictureUrl) { this.pictureUrl = pictureUrl; } public BookExtra getExtra() { return extra; } public void setExtra(BookExtra extra) { this.extra = extra; } public DateTime getPublicationDate() { return publicationDate; } public void setPublicationDate(DateTime publicationDate) { this.publicationDate = publicationDate; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public int getWordCount() { return wordCount; } public void setWordCount(int wordCount) { this.wordCount = wordCount; } public String getAuthorIntroduction() { return authorIntroduction; } public void setAuthorIntroduction(String authorIntroduction) { this.authorIntroduction = authorIntroduction; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public float getHighPrice() { return highPrice; } public void setHighPrice(float highPrice) { this.highPrice = highPrice; } public int getEvaluationNum() { return evaluationNum; } public void setEvaluationNum(int evaluationNum) { this.evaluationNum = evaluationNum; } public Binding getBinding() { return binding; } public void setBinding(Binding binding) { this.binding = binding; } public Status getStatus() { return status; } public void setStatus(Status status) { this.status = status; } public BookStatistic getStatistic() { return statistic; } public void setStatistic(BookStatistic statistic) { this.statistic = statistic; } public String getCatalogue() { return catalogue; } public void setCatalogue(String catalogue) { this.catalogue = catalogue; } }