Skip to content

Instantly share code, notes, and snippets.

@BrunoDSouza
Last active June 9, 2017 03:33
Show Gist options
  • Save BrunoDSouza/7160c358bfb3733f8b6812d8a28d469d to your computer and use it in GitHub Desktop.
Save BrunoDSouza/7160c358bfb3733f8b6812d8a28d469d to your computer and use it in GitHub Desktop.
CREATE TABLE produto(
IDPRODUTO INT AUTO_INCREMENT,
COD_TIPO INT,
COD_FORNECEDOR INT,
DESCRICAO VARCHAR(100) NOT NULL,
MEDIDA VARCHAR(20) NOT NULL,
VL_COMPRA REAL NOT NULL,
VL_VENDA REAL,
CONSTRAINT CK_VLVENDA CHECK(VL_VENDA > VL_COMPRA),
PRIMARY KEY(IDPRODUTO),
FOREIGN KEY(COD_TIPO)
REFERENCES tipo_produto(ID_TIPO),
FOREIGN KEY(COD_FORNECEDOR)
REFERENCES fornecedor(IDFORNECEDOR)
);
CREATE TABLE movimentacoes(
IDMOVIMENTACAO INT AUTO_INCREMENT,
COD_TIPOMOVIMENTO INT NOT NULL,
COD_PRODUTO INT,
COD_SETOR INT ,
DT_MOVIMENTO TIMESTAMP DEFAULT NOW(),
QTD_ITENS INT NOT NULL,
VL_UNITARIO REAL NOT NULL,
USUARIO VARCHAR(255) NOT NULL,
CONSTRAINT CK_QTD CHECK(QTD_ITENS > 0),
PRIMARY KEY(IDMOVIMENTACAO),
FOREIGN KEY(COD_PRODUTO)
REFERENCES produto(IDPRODUTO)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(COD_SETOR)
REFERENCES setor(IDSETOR)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
FOREIGN KEY(COD_TIPOMOVIMENTO)
REFERENCES tipo_movimento(IDTIPOMOVIMENTO)
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
@Entity
@Table(name="movimentacoes")
public class Movimentacao {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="idmovimentacao")
private Long codigo;
@NotNull
@Enumerated(EnumType.ORDINAL)
@Column(name="cod_tipomovimento")
private TipoMovimentacao tipoMovimentacao;
@NotNull
@Valid
@JoinColumn(name="cod_produto", nullable = false)
@ManyToOne
private Produto produto;
@NotNull
@Valid
@JoinColumn(name="cod_setor")
@ManyToOne
private Setor setor;
@NotNull
@Column(name="qtd_itens")
private Long qtd_produto;
@NotNull
@DateTimeFormat(pattern = "dd-MM-yyyy")
@Column(name="dt_movimento")
private Date dtMovimentacao = Calendar.getInstance().getTime();
@NotBlank
@Column(name="usuario")
private String usuario = "Administrator";
@Column(name="vl_unitario")
@NotNull
private Double vl_unitario;
/*Getters and Setters*/
}
@Entity
@Table(name="produto")
@ProductConstraint
public class Produto {
/** @Membros Privados **/
@Id
@Column(name="idproduto", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long codigo;
@NotNull
@JoinColumn(name="cod_tipo", nullable = false)
@ManyToOne
private TipoProduto tipoproduto;
@NotNull
@ManyToOne
@JoinColumn(name="cod_fornecedor", nullable = false)
private Fornecedor fornecedor;
@NotBlank
@Column(name="descricao")
@Size(message="O tamanho do nome deve possuir no máximo 100 caracteres!", max = 100)
private String nome;
@Column(name="medida")
@NotNull
@Enumerated(EnumType.ORDINAL)
private TipoMedida medida;
@Column(name="vl_compra")
@NotNull
@NumberFormat(pattern = "#,##0.00")
@Min(message="O Valor de compra deve ser maior que R$0,00!", value = 1)
private Double vl_compra;
@Column(name="vl_venda")
@NotNull
@NumberFormat(pattern = "#,##0.00")
@Min(message="O Valor de venda deve ser maior que R$0,00", value = 1)
private Double vl_venda;
/*Propriedades não mapeadas*/
@Transient
private Long qtd_estoque;
@Transient
private Long estoque_min;
@OneToMany(mappedBy="produto")
private List<Movimentacao> movimentacoes = new ArrayList<Movimentacao>();
/** @Getter e Setters **/
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment