/*
* Hibernate OGM, Domain model persistence for NoSQL datastores
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.ogm.datastore.mongodb.test.query.nativequery;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.persistence.ColumnResult;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.EntityResult;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.NamedNativeQueries;
import javax.persistence.NamedNativeQuery;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.SqlResultSetMappings;
import javax.persistence.Table;
@Entity
@Table(name = OscarWildePoem.TABLE_NAME, indexes = @Index(name = "year", columnList = "year"))
@NamedNativeQueries({
@NamedNativeQuery(name = "AthanasiaQuery", query = "{ $and: [ { name : 'Athanasia' }, { author : 'Oscar Wilde' } ] }", resultClass = OscarWildePoem.class ),
@NamedNativeQuery(name = "AthanasiaQueryWithMapping", query = "{ $and: [ { name : 'Athanasia' }, { author : 'Oscar Wilde' } ] }", resultSetMapping = "poemMapping" ),
@NamedNativeQuery(name = "AthanasiaProjectionQuery", query = "db.WILDE_POEM.find({ '$and' : [ { 'name' : 'Athanasia' }, { 'author' : 'Oscar Wilde' } ] })", resultSetMapping = "poemNameMapping" ),
@NamedNativeQuery(name = "PoemRatings", query = "db.WILDE_POEM.find({}, { 'rating' : 1 })", resultSetMapping = "ratingMapping" ),
@NamedNativeQuery(name = "CountPoems", query = "db.WILDE_POEM.count()", resultSetMapping = "countMapping")
})
@SqlResultSetMappings({
@SqlResultSetMapping(name = "poemNameMapping", columns = @ColumnResult(name = "name")),
@SqlResultSetMapping(name = "poemMapping", entities = @EntityResult(entityClass = OscarWildePoem.class)),
@SqlResultSetMapping(
name = "poemNameAuthorIdMapping",
columns = {
@ColumnResult(name = "name"),
@ColumnResult(name = "author"),
@ColumnResult(name = "_id")
}
),
@SqlResultSetMapping(name = "countMapping", columns = @ColumnResult(name = "n")),
@SqlResultSetMapping(name = "ratingMapping", columns = @ColumnResult(name = "rating", type = byte.class))
})
public class OscarWildePoem {
public static final String TABLE_NAME = "WILDE_POEM";
private Long id;
private String name;
private String author;
private byte rating;
private Integer year;
private List<String> mediums = new ArrayList<String>();
public OscarWildePoem() {
}
public OscarWildePoem(Long id, String name, String author, int year, String... mediums) {
this.id = id;
this.name = name;
this.author = author;
this.year = year;
this.mediums = Arrays.asList( mediums );
}
public OscarWildePoem(Long id, String name, String author, int year, byte rating) {
this.id = id;
this.name = name;
this.author = author;
this.year = year;
this.rating = rating;
}
@Id
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public byte getRating() {
return rating;
}
public void setRating(byte rating) {
this.rating = rating;
}
public Integer getYear() {
return year;
}
public void setYear(Integer year) {
this.year = year;
}
@ElementCollection
public List<String> getMediums() {
return mediums;
}
public void setMediums(List<String> medium) {
this.mediums = medium;
}
@Override
public String toString() {
return "OscarWildePoem [id=" + id + ", name=" + name + ", author=" + author + ", rating=" + rating + "]";
}
}