package io.ebean.bean;

Holds entity beans by there type and id.

This is used to ensure only one instance for a given entity type and id is used to build object graphs from queries and lazy loading.

/** * Holds entity beans by there type and id. * <p> * This is used to ensure only one instance for a given entity type and id is * used to build object graphs from queries and lazy loading. * </p> */
public interface PersistenceContext {
Put the entity bean into the PersistenceContext.
/** * Put the entity bean into the PersistenceContext. */
void put(Class<?> rootType, Object id, Object bean);
Put the entity bean into the PersistenceContext if one is not already present (for this id).

Returns an existing entity bean (if one is already there) and otherwise returns null.

/** * Put the entity bean into the PersistenceContext if one is not already * present (for this id). * <p> * Returns an existing entity bean (if one is already there) and otherwise * returns null. * </p> */
Object putIfAbsent(Class<?> rootType, Object id, Object bean);
Return an object given its type and unique id.
/** * Return an object given its type and unique id. */
Object get(Class<?> rootType, Object uid);
Get the bean from the persistence context also checked to see if it had been previously deleted (if so then you also can't hit the L2 cache to fetch the bean for this particular persistence context).
/** * Get the bean from the persistence context also checked to see if it had * been previously deleted (if so then you also can't hit the L2 cache to * fetch the bean for this particular persistence context). */
WithOption getWithOption(Class<?> rootType, Object uid);
Clear all the references.
/** * Clear all the references. */
void clear();
Clear all the references for a given type of entity bean.
/** * Clear all the references for a given type of entity bean. */
void clear(Class<?> rootType);
Clear the reference to a specific entity bean.
/** * Clear the reference to a specific entity bean. */
void clear(Class<?> rootType, Object uid);
Clear the reference as a result of an entity being deleted.
/** * Clear the reference as a result of an entity being deleted. */
void deleted(Class<?> rootType, Object id);
Return the number of beans of the given type in the persistence context.
/** * Return the number of beans of the given type in the persistence context. */
int size(Class<?> rootType);
Wrapper on a bean to also indicate if a bean has been deleted.

If a bean has been deleted then for the same persistence context is should not be able to be fetched from persistence context or L2 cache.

/** * Wrapper on a bean to also indicate if a bean has been deleted. * <p> * If a bean has been deleted then for the same persistence context is should * not be able to be fetched from persistence context or L2 cache. * </p> */
class WithOption {
The bean was previously deleted from this persistence context (can't hit L2 cache).
/** * The bean was previously deleted from this persistence context (can't hit * L2 cache). */
public static final WithOption DELETED = new WithOption(); private final boolean deleted; private final Object bean; private WithOption() { this.deleted = true; this.bean = null; }
The bean exists in the persistence context (and not been previously deleted).
/** * The bean exists in the persistence context (and not been previously deleted). */
public WithOption(Object bean) { this.deleted = false; this.bean = bean; }
Return true if the bean was deleted. This means you can't hit the L2 cache.
/** * Return true if the bean was deleted. This means you can't hit the L2 * cache. */
public boolean isDeleted() { return deleted; }
Return the bean (from the persistence context).
/** * Return the bean (from the persistence context). */
public Object getBean() { return bean; } } }