/**
 ******************************************************************************
 * Copyright © 2018 PTA GmbH.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 *
 *     http://www.eclipse.org/legal/epl-v10.html
 *
 ******************************************************************************
 */
package org.eclipse.openk.db.model;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * The persistent class for the "REF_BRANCH_LEVEL database table.
 */
@Entity
@Table(name = "ref_branch_level", schema = "public")
@NamedQuery(name = "RefBranchLevel.findAll", query = "SELECT r FROM RefBranchLevel r")
public class RefBranchLevel implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "REF_BRANCH_LEVEL_ID_SEQ")
    @SequenceGenerator(name = "REF_BRANCH_LEVEL_ID_SEQ", sequenceName = "REF_BRANCH_LEVEL_ID_SEQ", allocationSize = 1)
    @Column(name = "id", updatable = false)
    private Integer id;

    @Column(name = "name")
    private String name;

    @Column(name = "description")
    private String description;

    @Column(name = "fk_ref_branch")
    private Integer fkRefBranch;

    @Column(name = "create_user")
    private String createUser;

    @Column(name = "create_date")
    private Date createDate;

    @Column(name = "mod_user")
    private String modUser;

    @Column(name = "mod_date")
    private Date modDate;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) { this.id = id; }

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    public String getDescription() { return description; }

    public void setDescription(String description) { this.description = description; }

    public Integer getFkRefBranch() { return fkRefBranch; }

    public void setFkRefBranch(Integer fkRefBranch) { this.fkRefBranch = fkRefBranch; }

    public String getCreateUser() { return createUser; }

    public void setCreateUser(String createUser) { this.createUser = createUser; }

    public Date getCreateDate() { return createDate; }

    public void setCreateDate(Date createDate) { this.createDate = createDate; }

    public String getModUser() { return modUser; }

    public void setModUser(String modUser) { this.modUser = modUser; }

    public Date getModDate() { return modDate; }

    public void setModDate(Date modDate) { this.modDate = modDate; }
}
