// Path: src/main/java/com/github/mmonkey/destinations/entities/PlayerEntity.java
// @Entity
// @DynamicUpdate
// @Table(name = "players", uniqueConstraints = {
//         @UniqueConstraint(columnNames = "player_id")
// })
// @NamedQueries({
//         @NamedQuery(name = "getPlayer", query = "from PlayerEntity p where p.identifier = :identifier")
// })
// public class PlayerEntity implements Serializable {
// 
//     private static final long serialVersionUID = -6211408372176281682L;
// 
//     @Id
//     @Column(name = "player_id", unique = true, nullable = false)
//     @GeneratedValue(strategy = GenerationType.IDENTITY)
//     private long id;
// 
//     @Column(name = "identifier", unique = true, nullable = false)
//     private String identifier;
// 
//     @Column(name = "name", unique = true, nullable = false)
//     private String name;
// 
//     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
//     private Set<BackEntity> backs = new HashSet<>();
// 
//     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
//     private Set<BedEntity> beds = new HashSet<>();
// 
//     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
//     private Set<HomeEntity> homes = new HashSet<>();
// 
//     /**
//      * PlayerEntity default constructor
//      */
//     public PlayerEntity() {
//     }
// 
//     /**
//      * PlayerEntity constructor
//      *
//      * @param player Player
//      */
//     public PlayerEntity(Player player) {
//         Preconditions.checkNotNull(player);
// 
//         this.identifier = player.getIdentifier();
//         this.name = player.getName();
//     }
// 
//     /**
//      * @return long
//      */
//     public long getId() {
//         return id;
//     }
// 
//     /**
//      * @param id long
//      */
//     public void setId(long id) {
//         Preconditions.checkNotNull(id);
// 
//         this.id = id;
//     }
// 
//     /**
//      * @return String
//      */
//     public String getIdentifier() {
//         return identifier;
//     }
// 
//     /**
//      * @param identifier String
//      */
//     public void setIdentifier(String identifier) {
//         Preconditions.checkNotNull(identifier);
// 
//         this.identifier = identifier;
//     }
// 
//     /**
//      * @return String
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      * @param name String
//      */
//     public void setName(String name) {
//         Preconditions.checkNotNull(name);
// 
//         this.name = name;
//     }
// 
//     /**
//      * @return Set<BackEntity>
//      */
//     public Set<BackEntity> getBacks() {
//         return backs;
//     }
// 
//     /**
//      * @param backs Set<BackEntity>
//      */
//     public void setBacks(Set<BackEntity> backs) {
//         Preconditions.checkNotNull(backs);
// 
//         this.backs = backs;
//     }
// 
//     /**
//      * @return Set<BedEntity>
//      */
//     public Set<BedEntity> getBeds() {
//         return beds;
//     }
// 
//     /**
//      * @param beds Set<BedEntity>
//      */
//     public void setBeds(Set<BedEntity> beds) {
//         Preconditions.checkNotNull(beds);
// 
//         this.beds = beds;
//     }
// 
//     /**
//      * @return Set<HomeEntity>
//      */
//     public Set<HomeEntity> getHomes() {
//         return homes;
//     }
// 
//     /**
//      * @param homes Set<HomeEntity>
//      */
//     public void setHomes(Set<HomeEntity> homes) {
//         Preconditions.checkNotNull(homes);
// 
//         this.homes = homes;
//     }
// }


import com.github.mmonkey.destinations.entities.PlayerEntity;
import com.google.common.base.Preconditions;
import org.hibernate.Session;
import org.spongepowered.api.entity.living.player.Player;
import javax.persistence.Query;
import java.util.Optional;
package com.github.mmonkey.destinations.persistence.repositories;



public class PlayerRepository extends EntityRepository<PlayerEntity> {

    public static final PlayerRepository instance = new PlayerRepository();

    /**
     * Get a PlayerEntity by Player
     *
     * @param player Player
     * @return PlayerEntity
     */
    public Optional<PlayerEntity> get(Player player) {
        return this.get(player.getIdentifier());
    }

    /**
     * Get a PlayerEntity by identifier
     *
     * @param identifier String
     * @return PlayerEntity
     */
    public Optional<PlayerEntity> get(String identifier) {
        Preconditions.checkNotNull(identifier);

        Session session = this.sessionFactory.openSession();
        session.beginTransaction();
        Query query = session.createNamedQuery("getPlayer", PlayerEntity.class);
        query.setParameter("identifier", identifier);

        try {
            PlayerEntity result = (PlayerEntity) query.getSingleResult();
            session.close();
// Path: src/main/java/com/github/mmonkey/destinations/entities/PlayerEntity.java
// @Entity
// @DynamicUpdate
// @Table(name = "players", uniqueConstraints = {
//         @UniqueConstraint(columnNames = "player_id")
// })
// @NamedQueries({
//         @NamedQuery(name = "getPlayer", query = "from PlayerEntity p where p.identifier = :identifier")
// })
// public class PlayerEntity implements Serializable {
// 
//     private static final long serialVersionUID = -6211408372176281682L;
// 
//     @Id
//     @Column(name = "player_id", unique = true, nullable = false)
//     @GeneratedValue(strategy = GenerationType.IDENTITY)
//     private long id;
// 
//     @Column(name = "identifier", unique = true, nullable = false)
//     private String identifier;
// 
//     @Column(name = "name", unique = true, nullable = false)
//     private String name;
// 
//     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
//     private Set<BackEntity> backs = new HashSet<>();
// 
//     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
//     private Set<BedEntity> beds = new HashSet<>();
// 
//     @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
//     private Set<HomeEntity> homes = new HashSet<>();
// 
//     /**
//      * PlayerEntity default constructor
//      */
//     public PlayerEntity() {
//     }
// 
//     /**
//      * PlayerEntity constructor
//      *
//      * @param player Player
//      */
//     public PlayerEntity(Player player) {
//         Preconditions.checkNotNull(player);
// 
//         this.identifier = player.getIdentifier();
//         this.name = player.getName();
//     }
// 
//     /**
//      * @return long
//      */
//     public long getId() {
//         return id;
//     }
// 
//     /**
//      * @param id long
//      */
//     public void setId(long id) {
//         Preconditions.checkNotNull(id);
// 
//         this.id = id;
//     }
// 
//     /**
//      * @return String
//      */
//     public String getIdentifier() {
//         return identifier;
//     }
// 
//     /**
//      * @param identifier String
//      */
//     public void setIdentifier(String identifier) {
//         Preconditions.checkNotNull(identifier);
// 
//         this.identifier = identifier;
//     }
// 
//     /**
//      * @return String
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      * @param name String
//      */
//     public void setName(String name) {
//         Preconditions.checkNotNull(name);
// 
//         this.name = name;
//     }
// 
//     /**
//      * @return Set<BackEntity>
//      */
//     public Set<BackEntity> getBacks() {
//         return backs;
//     }
// 
//     /**
//      * @param backs Set<BackEntity>
//      */
//     public void setBacks(Set<BackEntity> backs) {
//         Preconditions.checkNotNull(backs);
// 
//         this.backs = backs;
//     }
// 
//     /**
//      * @return Set<BedEntity>
//      */
//     public Set<BedEntity> getBeds() {
//         return beds;
//     }
// 
//     /**
//      * @param beds Set<BedEntity>
//      */
//     public void setBeds(Set<BedEntity> beds) {
//         Preconditions.checkNotNull(beds);
// 
//         this.beds = beds;
//     }
// 
//     /**
//      * @return Set<HomeEntity>
//      */
//     public Set<HomeEntity> getHomes() {
//         return homes;
//     }
// 
//     /**
//      * @param homes Set<HomeEntity>
//      */
//     public void setHomes(Set<HomeEntity> homes) {
//         Preconditions.checkNotNull(homes);
// 
//         this.homes = homes;
//     }
// }


// Path: src/main/java/com/github/mmonkey/destinations/persistence/repositories/PlayerRepository.java
import com.github.mmonkey.destinations.entities.PlayerEntity;
import com.google.common.base.Preconditions;
import org.hibernate.Session;
import org.spongepowered.api.entity.living.player.Player;
import javax.persistence.Query;
import java.util.Optional;

package com.github.mmonkey.destinations.persistence.repositories;



public class PlayerRepository extends EntityRepository<PlayerEntity> {

    public static final PlayerRepository instance = new PlayerRepository();

    /**
     * Get a PlayerEntity by Player
     *
     * @param player Player
     * @return PlayerEntity
     */
    public Optional<PlayerEntity> get(Player player) {
        return this.get(player.getIdentifier());
    }

    /**
     * Get a PlayerEntity by identifier
     *
     * @param identifier String
     * @return PlayerEntity
     */
    public Optional<PlayerEntity> get(String identifier) {
        Preconditions.checkNotNull(identifier);

        Session session = this.sessionFactory.openSession();
        session.beginTransaction();
        Query query = session.createNamedQuery("getPlayer", PlayerEntity.class);
        query.setParameter("identifier", identifier);

        try {
            PlayerEntity result = (PlayerEntity) query.getSingleResult();
            session.close();
            return Optional.of(result);