Activity.java

package com.oracle.interview.db.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.Objects;


/**
 * {@code Activity} POJO describes that single activity that will be stored int the persistence and sent to the UI
 */

@Entity
@Table(name = "activities")
@NamedQueries({

    @NamedQuery(name = "com.oracle.activity.findAll", query = "SELECT a FROM Activity a where a.user = :user"),

    @NamedQuery(name = "com.oracle.activity.update", query = "update Activity set done = :done where id = :id"),
    @NamedQuery(name = "com.oracle.activity.deleteAll", query = "delete from Activity "),
    @NamedQuery(name = "com.oracle.activity.deleteById", query = "delete from Activity where id = :id")
})
public class Activity {

    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(
            name = "UUID",
            strategy = "org.hibernate.id.UUIDGenerator"
    )
    @Column(nullable = false, unique = true)
    private String id;

    @Column(name = "description", nullable = false)
    private String description;

    @Column(name = "date", nullable = false)
    private long date;


    @Column(name = "done")
    private boolean done;

    @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.ALL)
    @JoinColumn(name = "user")
    @JsonIgnore
    private User user;

    public Activity() {
    }

    public Activity(String description, long date, boolean done) {
        this.description = description;
        this.date = date;
        this.done = done;
    }

    public Activity(String description, long date, boolean done, User user) {
        this.description = description;
        this.date = date;
        this.done = done;
        this.user = user;
    }

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

    public String getId() {
        return id;
    }

    public String getDescription() {
        return description;
    }

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

    public long getDate() {
        return date;
    }

    public void setDate(long date) {
        this.date = date;
    }

    public boolean isDone() {
        return done;
    }

    public void setDone(boolean done) {
        this.done = done;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Activity activity = (Activity) o;
        return date == activity.date && done == activity.done && Objects.equals(id, activity.id) && Objects.equals(description, activity.description) && Objects.equals(user, activity.user);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, description, date, done, user);
    }
}