package org.dicadeveloper.weplantaforest.certificate; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import org.dicadeveloper.weplantaforest.cart.Cart; import org.dicadeveloper.weplantaforest.user.User; import org.dicadeveloper.weplantaforest.views.Views; import com.fasterxml.jackson.annotation.JsonView; import lombok.Getter; import lombok.Setter; @Entity @Getter @Setter public class Certificate { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "_certId") private Long certId; @Column(name = "_number", nullable = false, unique = true) private String number; @ManyToOne(optional = false) @JoinColumn(name = "_creator__userId") @JsonView(Views.CertificateSummary.class) private User creator; @Column(name = "_text", columnDefinition = "TEXT") @JsonView(Views.CertificateSummary.class) private String text; @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE) @JoinTable(name = "Certificate_Cart", joinColumns = { @JoinColumn(name = "Certificate__certId", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "_carts__cartId", nullable = false, updatable = false) }) private List<Cart> carts = new ArrayList<Cart>(); public String generateAndSetNumber(final int certificates) { long treeCount = 0; for (final Cart cart : carts) { treeCount += cart.getTreeCount(); } final StringBuilder sb = new StringBuilder(); sb.append(creator.getId()); sb.append("."); sb.append(certificates); sb.append("-"); sb.append(treeCount); this.number = sb.toString(); return sb.toString(); } public void addCart(final Cart cart) { carts.add(cart); } }