/*
* #%L
* Nazgul Project: nazgul-core-persistence-test
* %%
* Copyright (C) 2010 - 2017 jGuru Europe AB
* %%
* Licensed under the jGuru Europe AB license (the "License"), based
* on Apache License, Version 2.0; you may not use this file except
* in compliance with the License.
*
* You may obtain a copy of the License at
*
* http://www.jguru.se/licenses/jguruCorporateSourceLicense-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*
*/
package se.jguru.nazgul.test.persistence.pets;
import se.jguru.nazgul.core.persistence.model.NazgulEntity;
import se.jguru.nazgul.tools.validation.api.exception.InternalStateValidationException;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import java.util.ArrayList;
import java.util.List;
/**
* @author <a href="mailto:lj@jguru.se">Lennart Jörelid</a>, jGuru Europe AB
*/
@Entity
@NamedQueries({
@NamedQuery(
name = Seed.GET_SEEDS_BY_CATEGORY,
query = "select s from Seed s where s.category like ?1 order by s.name"),
@NamedQuery(
name = Seed.GET_SEEDS_BY_BIRD_NAME,
query = "select s from Seed s join s.eatenBy b where b.name like ?1 order by s.name"),
})
public class Seed extends NazgulEntity {
public static final String GET_SEEDS_BY_CATEGORY = "getSeedsByCategory";
public static final String GET_SEEDS_BY_BIRD_NAME = "getSeedsByBirdName";
@Basic(optional = false)
@Column(nullable = false, length = 64)
private String name;
@Basic(optional = false)
@Column(nullable = false, length = 128)
private String category;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Bird> eatenBy;
public Seed() {
}
public Seed(final String name, final String category) {
this.name = name;
this.category = category;
this.eatenBy = new ArrayList<Bird>();
}
public Seed(final String name, final String category, final List<Bird> eatenBy) {
this.name = name;
this.category = category;
this.eatenBy = eatenBy;
}
public List<Bird> getEatenBy() {
return eatenBy;
}
public String getCategory() {
return category;
}
public String getName() {
return name;
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
return "Seed: [" + getName() + ", " + getCategory() + "], eaten by: " + getEatenBy();
}
/**
* {@inheritDoc}
*/
@Override
protected void validateEntityState() throws InternalStateValidationException {
InternalStateValidationException.create()
.notNullOrEmpty(name, "name")
.notNullOrEmpty(category, "category")
.notNull(eatenBy, "eatenBy")
.endExpressionAndValidate();
}
}