HHH-4698 - Better handling of JPA criteria expressions
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@18268 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
a87e031bd5
commit
c1da5f1e3c
|
@ -35,7 +35,7 @@ import java.io.Serializable;
|
||||||
*/
|
*/
|
||||||
public class NamedParameterDescriptor implements Serializable {
|
public class NamedParameterDescriptor implements Serializable {
|
||||||
private final String name;
|
private final String name;
|
||||||
private final Type expectedType;
|
private Type expectedType;
|
||||||
private final int[] sourceLocations;
|
private final int[] sourceLocations;
|
||||||
private final boolean jpaStyle;
|
private final boolean jpaStyle;
|
||||||
|
|
||||||
|
@ -61,4 +61,8 @@ public class NamedParameterDescriptor implements Serializable {
|
||||||
public boolean isJpaStyle() {
|
public boolean isJpaStyle() {
|
||||||
return jpaStyle;
|
return jpaStyle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void resetExpectedType(Type type) {
|
||||||
|
this.expectedType = type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,8 +27,8 @@ import java.io.IOException;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.ObjectOutputStream;
|
import java.io.ObjectOutputStream;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
import javax.persistence.EntityNotFoundException;
|
import javax.persistence.EntityNotFoundException;
|
||||||
import javax.persistence.EntityTransaction;
|
import javax.persistence.EntityTransaction;
|
||||||
import javax.persistence.FlushModeType;
|
import javax.persistence.FlushModeType;
|
||||||
|
@ -59,6 +59,7 @@ import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import org.hibernate.*;
|
import org.hibernate.*;
|
||||||
import org.hibernate.cfg.Environment;
|
import org.hibernate.cfg.Environment;
|
||||||
|
import org.hibernate.ejb.criteria.ValueConverter;
|
||||||
import org.hibernate.ejb.transaction.JoinableCMTTransaction;
|
import org.hibernate.ejb.transaction.JoinableCMTTransaction;
|
||||||
import org.hibernate.ejb.util.ConfigurationHelper;
|
import org.hibernate.ejb.util.ConfigurationHelper;
|
||||||
import org.hibernate.ejb.criteria.CriteriaQueryCompiler;
|
import org.hibernate.ejb.criteria.CriteriaQueryCompiler;
|
||||||
|
@ -66,6 +67,7 @@ import org.hibernate.engine.SessionFactoryImplementor;
|
||||||
import org.hibernate.engine.SessionImplementor;
|
import org.hibernate.engine.SessionImplementor;
|
||||||
import org.hibernate.proxy.HibernateProxy;
|
import org.hibernate.proxy.HibernateProxy;
|
||||||
import org.hibernate.transaction.TransactionFactory;
|
import org.hibernate.transaction.TransactionFactory;
|
||||||
|
import org.hibernate.transform.BasicTransformerAdapter;
|
||||||
import org.hibernate.util.CollectionHelper;
|
import org.hibernate.util.CollectionHelper;
|
||||||
import org.hibernate.util.JTAHelper;
|
import org.hibernate.util.JTAHelper;
|
||||||
|
|
||||||
|
@ -140,6 +142,45 @@ public abstract class AbstractEntityManagerImpl implements HibernateEntityManage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T> TypedQuery<T> createQuery(
|
||||||
|
String jpaqlString,
|
||||||
|
Class<T> resultClass,
|
||||||
|
Options options) {
|
||||||
|
try {
|
||||||
|
org.hibernate.Query hqlQuery = getSession().createQuery( jpaqlString );
|
||||||
|
if ( options.getConversions() != null ) {
|
||||||
|
hqlQuery.setResultTransformer( new ValueConversionResultTransformer( options.getConversions() ) );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
options.getResultMetadataValidator().validate( hqlQuery.getReturnTypes() );
|
||||||
|
}
|
||||||
|
return new QueryImpl<T>( hqlQuery, this, options.getNamedParameterExplicitTypes() );
|
||||||
|
}
|
||||||
|
catch ( HibernateException he ) {
|
||||||
|
throw convert( he );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class ValueConversionResultTransformer extends BasicTransformerAdapter {
|
||||||
|
private List<ValueConverter.Conversion> conversions;
|
||||||
|
|
||||||
|
private ValueConversionResultTransformer(List<ValueConverter.Conversion> conversions) {
|
||||||
|
this.conversions = conversions;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object transformTuple(Object[] tuple, String[] aliases) {
|
||||||
|
Object[] result = new Object[ tuple.length ];
|
||||||
|
for ( int i = 0; i < tuple.length; i++ ) {
|
||||||
|
ValueConverter.Conversion conversion = conversions.get( i );
|
||||||
|
result[i] = conversion == null
|
||||||
|
? tuple[i]
|
||||||
|
: conversion.apply( tuple[i] );
|
||||||
|
}
|
||||||
|
return result.length == 1 ? result[0] : result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private CriteriaQueryCompiler criteriaQueryCompiler;
|
private CriteriaQueryCompiler criteriaQueryCompiler;
|
||||||
|
|
||||||
public <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery) {
|
public <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery) {
|
||||||
|
|
|
@ -25,11 +25,16 @@ package org.hibernate.ejb;
|
||||||
|
|
||||||
import javax.persistence.PersistenceException;
|
import javax.persistence.PersistenceException;
|
||||||
import javax.persistence.LockModeType;
|
import javax.persistence.LockModeType;
|
||||||
|
import javax.persistence.TypedQuery;
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.StaleStateException;
|
import org.hibernate.StaleStateException;
|
||||||
import org.hibernate.LockOptions;
|
import org.hibernate.LockOptions;
|
||||||
|
import org.hibernate.ejb.criteria.ValueConverter;
|
||||||
|
import org.hibernate.transform.ResultTransformer;
|
||||||
|
import org.hibernate.type.Type;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -108,4 +113,38 @@ public interface HibernateEntityManagerImplementor extends HibernateEntityManage
|
||||||
* @return the LockOptions
|
* @return the LockOptions
|
||||||
*/
|
*/
|
||||||
public LockOptions getLockRequest(LockModeType lockModeType, Map<String, Object> properties);
|
public LockOptions getLockRequest(LockModeType lockModeType, Map<String, Object> properties);
|
||||||
|
|
||||||
|
public static interface Options {
|
||||||
|
public static interface ResultMetadataValidator {
|
||||||
|
public void validate(Type[] returnTypes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the conversions for the individual tuples in the query results.
|
||||||
|
*
|
||||||
|
* @return Value conversions to be applied to the JPA QL results
|
||||||
|
*/
|
||||||
|
public List<ValueConverter.Conversion> getConversions();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the explicit parameter types. Generally speaking these would apply to implicit named
|
||||||
|
* parameters.
|
||||||
|
*
|
||||||
|
* @return The
|
||||||
|
*/
|
||||||
|
public Map<String,Class> getNamedParameterExplicitTypes();
|
||||||
|
|
||||||
|
public ResultMetadataValidator getResultMetadataValidator();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used during "compiling" a JPA criteria query.
|
||||||
|
*
|
||||||
|
* @param jpaqlString The criteria query rendered as a JPA QL string
|
||||||
|
* @param resultClass The result type (the type expected in the result list)
|
||||||
|
* @param options The options to use to build the query.
|
||||||
|
* @param <T> The query type
|
||||||
|
* @return The typed query
|
||||||
|
*/
|
||||||
|
public <T> TypedQuery<T> createQuery(String jpaqlString, Class<T> resultClass, Options options);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,9 +25,11 @@ package org.hibernate.ejb;
|
||||||
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.persistence.NoResultException;
|
import javax.persistence.NoResultException;
|
||||||
|
@ -56,6 +58,7 @@ import org.hibernate.engine.query.NamedParameterDescriptor;
|
||||||
import org.hibernate.engine.query.OrdinalParameterDescriptor;
|
import org.hibernate.engine.query.OrdinalParameterDescriptor;
|
||||||
import org.hibernate.hql.QueryExecutionRequestException;
|
import org.hibernate.hql.QueryExecutionRequestException;
|
||||||
import org.hibernate.impl.AbstractQueryImpl;
|
import org.hibernate.impl.AbstractQueryImpl;
|
||||||
|
import org.hibernate.type.TypeFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hibernate implementation of both the {@link Query} and {@link TypedQuery} contracts.
|
* Hibernate implementation of both the {@link Query} and {@link TypedQuery} contracts.
|
||||||
|
@ -72,13 +75,20 @@ public class QueryImpl<X> extends org.hibernate.ejb.AbstractQueryImpl<X> impleme
|
||||||
private Set<Parameter<?>> parameters;
|
private Set<Parameter<?>> parameters;
|
||||||
|
|
||||||
public QueryImpl(org.hibernate.Query query, AbstractEntityManagerImpl em) {
|
public QueryImpl(org.hibernate.Query query, AbstractEntityManagerImpl em) {
|
||||||
|
this( query, em, Collections.<String, Class>emptyMap() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public QueryImpl(
|
||||||
|
org.hibernate.Query query,
|
||||||
|
AbstractEntityManagerImpl em,
|
||||||
|
Map<String,Class> namedParameterTypeRedefinitions) {
|
||||||
super( em );
|
super( em );
|
||||||
this.query = query;
|
this.query = query;
|
||||||
extractParameterInfo();
|
extractParameterInfo( namedParameterTypeRedefinitions );
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({ "unchecked", "RedundantCast" })
|
@SuppressWarnings({ "unchecked", "RedundantCast" })
|
||||||
private void extractParameterInfo() {
|
private void extractParameterInfo(Map<String,Class> namedParameterTypeRedefinition) {
|
||||||
if ( ! AbstractQueryImpl.class.isInstance( query ) ) {
|
if ( ! AbstractQueryImpl.class.isInstance( query ) ) {
|
||||||
throw new IllegalStateException( "Unknown query type for parameter extraction" );
|
throw new IllegalStateException( "Unknown query type for parameter extraction" );
|
||||||
}
|
}
|
||||||
|
@ -90,12 +100,16 @@ public class QueryImpl<X> extends org.hibernate.ejb.AbstractQueryImpl<X> impleme
|
||||||
for ( String name : (Set<String>) queryImpl.getParameterMetadata().getNamedParameterNames() ) {
|
for ( String name : (Set<String>) queryImpl.getParameterMetadata().getNamedParameterNames() ) {
|
||||||
final NamedParameterDescriptor descriptor =
|
final NamedParameterDescriptor descriptor =
|
||||||
queryImpl.getParameterMetadata().getNamedParameterDescriptor( name );
|
queryImpl.getParameterMetadata().getNamedParameterDescriptor( name );
|
||||||
final ParameterImpl parameter = new ParameterImpl(
|
Class javaType = namedParameterTypeRedefinition.get( name );
|
||||||
name,
|
if ( javaType != null ) {
|
||||||
descriptor.getExpectedType() == null
|
descriptor.resetExpectedType(
|
||||||
? null
|
TypeFactory.heuristicType( javaType.getName() )
|
||||||
: descriptor.getExpectedType().getReturnedClass()
|
);
|
||||||
);
|
}
|
||||||
|
else if ( descriptor.getExpectedType() != null ) {
|
||||||
|
javaType = descriptor.getExpectedType().getReturnedClass();
|
||||||
|
}
|
||||||
|
final ParameterImpl parameter = new ParameterImpl( name, javaType );
|
||||||
parameters.add( parameter );
|
parameters.add( parameter );
|
||||||
if ( descriptor.isJpaStyle() ) {
|
if ( descriptor.isJpaStyle() ) {
|
||||||
if ( jpaPositionalIndices == null ) {
|
if ( jpaPositionalIndices == null ) {
|
||||||
|
|
|
@ -48,6 +48,7 @@ import org.hibernate.ejb.criteria.expression.CoalesceExpression;
|
||||||
import org.hibernate.ejb.criteria.expression.CollectionExpression;
|
import org.hibernate.ejb.criteria.expression.CollectionExpression;
|
||||||
import org.hibernate.ejb.criteria.expression.CompoundSelectionImpl;
|
import org.hibernate.ejb.criteria.expression.CompoundSelectionImpl;
|
||||||
import org.hibernate.ejb.criteria.expression.ConcatExpression;
|
import org.hibernate.ejb.criteria.expression.ConcatExpression;
|
||||||
|
import org.hibernate.ejb.criteria.ExpressionImplementor;
|
||||||
import org.hibernate.ejb.criteria.expression.ParameterExpressionImpl;
|
import org.hibernate.ejb.criteria.expression.ParameterExpressionImpl;
|
||||||
import org.hibernate.ejb.criteria.expression.LiteralExpression;
|
import org.hibernate.ejb.criteria.expression.LiteralExpression;
|
||||||
import org.hibernate.ejb.criteria.expression.NullifExpression;
|
import org.hibernate.ejb.criteria.expression.NullifExpression;
|
||||||
|
@ -1062,50 +1063,50 @@ public class CriteriaBuilderImpl implements CriteriaBuilder, Serializable {
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public Expression<Long> toLong(Expression<? extends Number> expression) {
|
public ExpressionImplementor<Long> toLong(Expression<? extends Number> expression) {
|
||||||
return expression.as( Long.class );
|
return ( (ExpressionImplementor<? extends Number>) expression ).asLong();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public Expression<Integer> toInteger(Expression<? extends Number> expression) {
|
public ExpressionImplementor<Integer> toInteger(Expression<? extends Number> expression) {
|
||||||
return expression.as( Integer.class );
|
return ( (ExpressionImplementor<? extends Number>) expression ).asInteger();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public Expression<Float> toFloat(Expression<? extends Number> expression) {
|
public ExpressionImplementor<Float> toFloat(Expression<? extends Number> expression) {
|
||||||
return expression.as( Float.class );
|
return ( (ExpressionImplementor<? extends Number>) expression ).asFloat();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public Expression<Double> toDouble(Expression<? extends Number> expression) {
|
public ExpressionImplementor<Double> toDouble(Expression<? extends Number> expression) {
|
||||||
return expression.as( Double.class );
|
return ( (ExpressionImplementor<? extends Number>) expression ).asDouble();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public Expression<BigDecimal> toBigDecimal(Expression<? extends Number> expression) {
|
public ExpressionImplementor<BigDecimal> toBigDecimal(Expression<? extends Number> expression) {
|
||||||
return expression.as( BigDecimal.class );
|
return ( (ExpressionImplementor<? extends Number>) expression ).asBigDecimal();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public Expression<BigInteger> toBigInteger(Expression<? extends Number> expression) {
|
public ExpressionImplementor<BigInteger> toBigInteger(Expression<? extends Number> expression) {
|
||||||
return expression.as( BigInteger.class );
|
return ( (ExpressionImplementor<? extends Number>) expression ).asBigInteger();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public Expression<String> toString(Expression<Character> characterExpression) {
|
public ExpressionImplementor<String> toString(Expression<Character> characterExpression) {
|
||||||
return characterExpression.as( String.class );
|
return ( (ExpressionImplementor<Character>) characterExpression ).asString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,8 @@ import org.hibernate.util.StringHelper;
|
||||||
*/
|
*/
|
||||||
public class CriteriaQueryCompiler {
|
public class CriteriaQueryCompiler {
|
||||||
public static interface ImplicitParameterBinding {
|
public static interface ImplicitParameterBinding {
|
||||||
|
public String getParameterName();
|
||||||
|
public Class getJavaType();
|
||||||
public void bind(TypedQuery typedQuery);
|
public void bind(TypedQuery typedQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,6 +72,8 @@ public class CriteriaQueryCompiler {
|
||||||
|
|
||||||
public static interface RenderedCriteriaQuery {
|
public static interface RenderedCriteriaQuery {
|
||||||
public String getQueryString();
|
public String getQueryString();
|
||||||
|
public List<ValueConverter.Conversion> getValueConversions();
|
||||||
|
public HibernateEntityManagerImplementor.Options.ResultMetadataValidator getResultMetadataValidator();
|
||||||
}
|
}
|
||||||
|
|
||||||
private final HibernateEntityManagerImplementor entityManager;
|
private final HibernateEntityManagerImplementor entityManager;
|
||||||
|
@ -85,6 +89,7 @@ public class CriteriaQueryCompiler {
|
||||||
final Map<ParameterExpression<?>,String> explicitParameterMapping = new HashMap<ParameterExpression<?>,String>();
|
final Map<ParameterExpression<?>,String> explicitParameterMapping = new HashMap<ParameterExpression<?>,String>();
|
||||||
final Map<String,ParameterExpression<?>> explicitParameterNameMapping = new HashMap<String,ParameterExpression<?>>();
|
final Map<String,ParameterExpression<?>> explicitParameterNameMapping = new HashMap<String,ParameterExpression<?>>();
|
||||||
final List<ImplicitParameterBinding> implicitParameterBindings = new ArrayList<ImplicitParameterBinding>();
|
final List<ImplicitParameterBinding> implicitParameterBindings = new ArrayList<ImplicitParameterBinding>();
|
||||||
|
final Map<String,Class> implicitParameterTypes = new HashMap<String, Class>();
|
||||||
|
|
||||||
RenderingContext renderingContext = new RenderingContext() {
|
RenderingContext renderingContext = new RenderingContext() {
|
||||||
private int aliasCount = 0;
|
private int aliasCount = 0;
|
||||||
|
@ -110,6 +115,10 @@ public class CriteriaQueryCompiler {
|
||||||
|
|
||||||
public void registerImplicitParameterBinding(ImplicitParameterBinding binding) {
|
public void registerImplicitParameterBinding(ImplicitParameterBinding binding) {
|
||||||
implicitParameterBindings.add( binding );
|
implicitParameterBindings.add( binding );
|
||||||
|
implicitParameterTypes.put(
|
||||||
|
binding.getParameterName(),
|
||||||
|
binding.getJavaType()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getCastType(Class javaType) {
|
public String getCastType(Class javaType) {
|
||||||
|
@ -132,12 +141,26 @@ public class CriteriaQueryCompiler {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
RenderedCriteriaQuery renderedCriteriaQuery = criteriaQueryImpl.render( renderingContext );
|
final RenderedCriteriaQuery renderedCriteriaQuery = criteriaQueryImpl.render( renderingContext );
|
||||||
|
|
||||||
TypedQuery<T> jpaqlQuery = entityManager.createQuery(
|
TypedQuery<T> jpaqlQuery = entityManager.createQuery(
|
||||||
renderedCriteriaQuery.getQueryString(),
|
renderedCriteriaQuery.getQueryString(),
|
||||||
criteriaQuery.getResultType()
|
criteriaQuery.getResultType(),
|
||||||
|
new HibernateEntityManagerImplementor.Options() {
|
||||||
|
public List<ValueConverter.Conversion> getConversions() {
|
||||||
|
return renderedCriteriaQuery.getValueConversions();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Class> getNamedParameterExplicitTypes() {
|
||||||
|
return implicitParameterTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResultMetadataValidator getResultMetadataValidator() {
|
||||||
|
return renderedCriteriaQuery.getResultMetadataValidator();
|
||||||
|
}
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
for ( ImplicitParameterBinding implicitParameterBinding : implicitParameterBindings ) {
|
for ( ImplicitParameterBinding implicitParameterBinding : implicitParameterBindings ) {
|
||||||
implicitParameterBinding.bind( jpaqlQuery );
|
implicitParameterBinding.bind( jpaqlQuery );
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,6 +38,9 @@ import javax.persistence.Tuple;
|
||||||
import javax.persistence.criteria.Subquery;
|
import javax.persistence.criteria.Subquery;
|
||||||
import javax.persistence.metamodel.EntityType;
|
import javax.persistence.metamodel.EntityType;
|
||||||
|
|
||||||
|
import org.hibernate.ejb.HibernateEntityManagerImplementor;
|
||||||
|
import org.hibernate.type.Type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Hibernate implementation of the JPA {@link CriteriaQuery} contract. Mostly a set of delegation to its
|
* The Hibernate implementation of the JPA {@link CriteriaQuery} contract. Mostly a set of delegation to its
|
||||||
* internal {@link QueryStructure}.
|
* internal {@link QueryStructure}.
|
||||||
|
@ -350,6 +353,41 @@ public class CriteriaQueryImpl<T> extends AbstractNode implements CriteriaQuery<
|
||||||
public String getQueryString() {
|
public String getQueryString() {
|
||||||
return jpaqlQuery.toString();
|
return jpaqlQuery.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
public List<ValueConverter.Conversion> getValueConversions() {
|
||||||
|
SelectionImplementor selection = (SelectionImplementor) queryStructure.getSelection();
|
||||||
|
return selection == null
|
||||||
|
? null
|
||||||
|
: selection.getConversions();
|
||||||
|
}
|
||||||
|
|
||||||
|
public HibernateEntityManagerImplementor.Options.ResultMetadataValidator getResultMetadataValidator() {
|
||||||
|
return new HibernateEntityManagerImplementor.Options.ResultMetadataValidator() {
|
||||||
|
public void validate(Type[] returnTypes) {
|
||||||
|
SelectionImplementor selection = (SelectionImplementor) queryStructure.getSelection();
|
||||||
|
if ( selection != null ) {
|
||||||
|
if ( selection.isCompoundSelection() ) {
|
||||||
|
if ( returnTypes.length != selection.getCompoundSelectionItems().size() ) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Number of return values [" + returnTypes.length +
|
||||||
|
"] did not match expected [" +
|
||||||
|
selection.getCompoundSelectionItems().size() + "]"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ( returnTypes.length > 1 ) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"Number of return values [" + returnTypes.length +
|
||||||
|
"] did not match expected [1]"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 by Red Hat Inc and/or its affiliates or by
|
||||||
|
* third-party contributors as indicated by either @author tags or express
|
||||||
|
* copyright attribution statements applied by the authors. All
|
||||||
|
* third-party contributions are distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.criteria;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import javax.persistence.criteria.Expression;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public interface ExpressionImplementor<T> extends SelectionImplementor<T>, Expression<T>, Renderable {
|
||||||
|
/**
|
||||||
|
* See {@link javax.persistence.criteria.CriteriaBuilder#toLong}
|
||||||
|
*
|
||||||
|
* @return <tt>this</tt> but as a long
|
||||||
|
*/
|
||||||
|
public ExpressionImplementor<Long> asLong();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See {@link javax.persistence.criteria.CriteriaBuilder#toInteger}
|
||||||
|
*
|
||||||
|
* @return <tt>this</tt> but as an integer
|
||||||
|
*/
|
||||||
|
public ExpressionImplementor<Integer> asInteger();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See {@link javax.persistence.criteria.CriteriaBuilder#toFloat}
|
||||||
|
*
|
||||||
|
* @return <tt>this</tt> but as a float
|
||||||
|
*/
|
||||||
|
public ExpressionImplementor<Float> asFloat();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See {@link javax.persistence.criteria.CriteriaBuilder#toDouble}
|
||||||
|
*
|
||||||
|
* @return <tt>this</tt> but as a double
|
||||||
|
*/
|
||||||
|
public ExpressionImplementor<Double> asDouble();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See {@link javax.persistence.criteria.CriteriaBuilder#toBigDecimal}
|
||||||
|
*
|
||||||
|
* @return <tt>this</tt> but as a {@link BigDecimal}
|
||||||
|
*/
|
||||||
|
public ExpressionImplementor<BigDecimal> asBigDecimal();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See {@link javax.persistence.criteria.CriteriaBuilder#toBigInteger}
|
||||||
|
*
|
||||||
|
* @return <tt>this</tt> but as a {@link BigInteger}
|
||||||
|
*/
|
||||||
|
public ExpressionImplementor<BigInteger> asBigInteger();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See {@link javax.persistence.criteria.CriteriaBuilder#toString}
|
||||||
|
*
|
||||||
|
* @return <tt>this</tt> but as a string
|
||||||
|
*/
|
||||||
|
public ExpressionImplementor<String> asString();
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.criteria;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import javax.persistence.criteria.Selection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public interface SelectionImplementor<X> extends TupleElementImplementor<X>, Selection<X> {
|
||||||
|
public List<ValueConverter.Conversion> getConversions();
|
||||||
|
}
|
|
@ -1,10 +1,10 @@
|
||||||
/*
|
/*
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* Copyright (c) 2009 by Red Hat Inc and/or its affiliates or by
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
* third-party contributors as indicated by either @author tags or express
|
* indicated by the @author tags or express copyright attribution
|
||||||
* copyright attribution statements applied by the authors. All
|
* statements applied by the authors. All third-party contributions are
|
||||||
* third-party contributions are distributed under license by Red Hat Inc.
|
* distributed under license by Red Hat Inc.
|
||||||
*
|
*
|
||||||
* This copyrighted material is made available to anyone wishing to use, modify,
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
* copy, or redistribute it subject to the terms and conditions of the GNU
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
@ -21,16 +21,15 @@
|
||||||
* 51 Franklin Street, Fifth Floor
|
* 51 Franklin Street, Fifth Floor
|
||||||
* Boston, MA 02110-1301 USA
|
* Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
package org.hibernate.ejb.criteria.expression;
|
package org.hibernate.ejb.criteria;
|
||||||
|
|
||||||
import javax.persistence.criteria.Expression;
|
import javax.persistence.TupleElement;
|
||||||
|
|
||||||
import org.hibernate.ejb.criteria.Renderable;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO : javadoc
|
* TODO : javadoc
|
||||||
*
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public interface ExpressionImplementor<T> extends Expression<T>, Renderable {
|
public interface TupleElementImplementor<X> extends TupleElement<X> {
|
||||||
|
public ValueConverter.Conversion<X> getConversion();
|
||||||
}
|
}
|
|
@ -0,0 +1,255 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.criteria;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper for generically converting a values into another type.
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public class ValueConverter {
|
||||||
|
private ValueConverter() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static interface Conversion<T> {
|
||||||
|
public T apply(Object value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ByteConversion implements Conversion<Byte> {
|
||||||
|
public static final ByteConversion INSTANCE = new ByteConversion();
|
||||||
|
@SuppressWarnings({ "UnnecessaryBoxing" })
|
||||||
|
public Byte apply(Object value) {
|
||||||
|
if ( value == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ( Number.class.isInstance( value ) ) {
|
||||||
|
return Byte.valueOf( ( (Number) value ).byteValue() );
|
||||||
|
}
|
||||||
|
else if ( String.class.isInstance( value ) ) {
|
||||||
|
return Byte.valueOf( ( (String) value ) );
|
||||||
|
}
|
||||||
|
throw unknownConversion( value, Byte.class );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ShortConversion implements Conversion<Short> {
|
||||||
|
public static final ShortConversion INSTANCE = new ShortConversion();
|
||||||
|
@SuppressWarnings({ "UnnecessaryBoxing" })
|
||||||
|
public Short apply(Object value) {
|
||||||
|
if ( value == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ( Number.class.isInstance( value ) ) {
|
||||||
|
return Short.valueOf( ( (Number) value ).shortValue() );
|
||||||
|
}
|
||||||
|
else if ( String.class.isInstance( value ) ) {
|
||||||
|
return Short.valueOf( ( (String) value ) );
|
||||||
|
}
|
||||||
|
throw unknownConversion( value, Short.class );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class IntegerConversion implements Conversion<Integer> {
|
||||||
|
public static final IntegerConversion INSTANCE = new IntegerConversion();
|
||||||
|
@SuppressWarnings({ "UnnecessaryBoxing" })
|
||||||
|
public Integer apply(Object value) {
|
||||||
|
if ( value == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ( Number.class.isInstance( value ) ) {
|
||||||
|
return Integer.valueOf( ( (Number) value ).intValue() );
|
||||||
|
}
|
||||||
|
else if ( String.class.isInstance( value ) ) {
|
||||||
|
return Integer.valueOf( ( (String) value ) );
|
||||||
|
}
|
||||||
|
throw unknownConversion( value, Integer.class );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class LongConversion implements Conversion<Long> {
|
||||||
|
public static final LongConversion INSTANCE = new LongConversion();
|
||||||
|
@SuppressWarnings({ "UnnecessaryBoxing" })
|
||||||
|
public Long apply(Object value) {
|
||||||
|
if ( value == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ( Number.class.isInstance( value ) ) {
|
||||||
|
return Long.valueOf( ( (Number) value ).longValue() );
|
||||||
|
}
|
||||||
|
else if ( String.class.isInstance( value ) ) {
|
||||||
|
return Long.valueOf( ( (String) value ) );
|
||||||
|
}
|
||||||
|
throw unknownConversion( value, Long.class );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class FloatConversion implements Conversion<Float> {
|
||||||
|
public static final FloatConversion INSTANCE = new FloatConversion();
|
||||||
|
@SuppressWarnings({ "UnnecessaryBoxing" })
|
||||||
|
public Float apply(Object value) {
|
||||||
|
if ( value == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ( Number.class.isInstance( value ) ) {
|
||||||
|
return Float.valueOf( ( (Number) value ).floatValue() );
|
||||||
|
}
|
||||||
|
else if ( String.class.isInstance( value ) ) {
|
||||||
|
return Float.valueOf( ( (String) value ) );
|
||||||
|
}
|
||||||
|
throw unknownConversion( value, Float.class );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class DoubleConversion implements Conversion<Double> {
|
||||||
|
public static final DoubleConversion INSTANCE = new DoubleConversion();
|
||||||
|
@SuppressWarnings({ "UnnecessaryBoxing" })
|
||||||
|
public Double apply(Object value) {
|
||||||
|
if ( value == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ( Number.class.isInstance( value ) ) {
|
||||||
|
return Double.valueOf( ( (Number) value ).doubleValue() );
|
||||||
|
}
|
||||||
|
else if ( String.class.isInstance( value ) ) {
|
||||||
|
return Double.valueOf( ( (String) value ) );
|
||||||
|
}
|
||||||
|
throw unknownConversion( value, Double.class );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class BigIntegerConversion implements Conversion<BigInteger> {
|
||||||
|
public static final BigIntegerConversion INSTANCE = new BigIntegerConversion();
|
||||||
|
public BigInteger apply(Object value) {
|
||||||
|
if ( value == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ( Number.class.isInstance( value ) ) {
|
||||||
|
return BigInteger.valueOf( ( (Number) value ).longValue() );
|
||||||
|
}
|
||||||
|
else if ( String.class.isInstance( value ) ) {
|
||||||
|
return new BigInteger( (String) value );
|
||||||
|
}
|
||||||
|
throw unknownConversion( value, BigInteger.class );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class BigDecimalConversion implements Conversion<BigDecimal> {
|
||||||
|
public static final BigDecimalConversion INSTANCE = new BigDecimalConversion();
|
||||||
|
public BigDecimal apply(Object value) {
|
||||||
|
if ( value == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ( BigInteger.class.isInstance( value ) ) {
|
||||||
|
return new BigDecimal( (BigInteger) value );
|
||||||
|
}
|
||||||
|
else if ( Number.class.isInstance( value ) ) {
|
||||||
|
return BigDecimal.valueOf( ( (Number) value ).doubleValue() );
|
||||||
|
}
|
||||||
|
else if ( String.class.isInstance( value ) ) {
|
||||||
|
return new BigDecimal( (String) value );
|
||||||
|
}
|
||||||
|
throw unknownConversion( value, BigDecimal.class );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class StringConversion implements Conversion<String> {
|
||||||
|
public static final StringConversion INSTANCE = new StringConversion();
|
||||||
|
public String apply(Object value) {
|
||||||
|
return value == null ? null : value.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IllegalArgumentException unknownConversion(Object value, Class type) {
|
||||||
|
return new IllegalArgumentException(
|
||||||
|
"Unaware how to convert value [" + value + "] to requested type [" + type.getName() + "]"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the given value into the specified target type.
|
||||||
|
*
|
||||||
|
* @param value The value to convert
|
||||||
|
* @param targetType The type to which it should be converted
|
||||||
|
*
|
||||||
|
* @return The converted value.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
public static <T> T convert(Object value, Class<T> targetType) {
|
||||||
|
if ( value == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if ( targetType.equals( value.getClass() ) ) {
|
||||||
|
return (T) value;
|
||||||
|
}
|
||||||
|
|
||||||
|
Conversion<T> conversion = determineAppropriateConversion( targetType );
|
||||||
|
if ( conversion == null ) {
|
||||||
|
throw unknownConversion( value, targetType );
|
||||||
|
}
|
||||||
|
return conversion.apply( value );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine the appropriate {@link Conversion} strategy for converting a value
|
||||||
|
* to the given target type
|
||||||
|
*
|
||||||
|
* @param targetType The target type (to which we want to convert values).
|
||||||
|
* @param <T> parameterized type for the target type.
|
||||||
|
* @return The conversion
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
public static <T> Conversion<T> determineAppropriateConversion(Class<T> targetType) {
|
||||||
|
if ( String.class.equals( targetType ) ) {
|
||||||
|
return (Conversion<T>) StringConversion.INSTANCE;
|
||||||
|
}
|
||||||
|
if ( Byte.class.equals( targetType ) ) {
|
||||||
|
return (Conversion<T>) ByteConversion.INSTANCE;
|
||||||
|
}
|
||||||
|
if ( Short.class.equals( targetType ) ) {
|
||||||
|
return (Conversion<T>) ShortConversion.INSTANCE;
|
||||||
|
}
|
||||||
|
if ( Integer.class.equals( targetType ) ) {
|
||||||
|
return (Conversion<T>) IntegerConversion.INSTANCE;
|
||||||
|
}
|
||||||
|
if ( Long.class.equals( targetType ) ) {
|
||||||
|
return (Conversion<T>) LongConversion.INSTANCE;
|
||||||
|
}
|
||||||
|
if ( Float.class.equals( targetType ) ) {
|
||||||
|
return (Conversion<T>) FloatConversion.INSTANCE;
|
||||||
|
}
|
||||||
|
if ( Double.class.equals( targetType ) ) {
|
||||||
|
return (Conversion<T>) DoubleConversion.INSTANCE;
|
||||||
|
}
|
||||||
|
if ( BigInteger.class.equals( targetType ) ) {
|
||||||
|
return (Conversion<T>) BigIntegerConversion.INSTANCE;
|
||||||
|
}
|
||||||
|
if ( BigDecimal.class.equals( targetType ) ) {
|
||||||
|
return (Conversion<T>) BigDecimalConversion.INSTANCE;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,22 +23,27 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.ejb.criteria.expression;
|
package org.hibernate.ejb.criteria.expression;
|
||||||
|
|
||||||
import javax.persistence.TupleElement;
|
|
||||||
|
|
||||||
import org.hibernate.ejb.criteria.AbstractNode;
|
import org.hibernate.ejb.criteria.AbstractNode;
|
||||||
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
||||||
|
import org.hibernate.ejb.criteria.TupleElementImplementor;
|
||||||
|
import org.hibernate.ejb.criteria.ValueConverter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO : javadoc
|
* TODO : javadoc
|
||||||
*
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractTupleElement<X> extends AbstractNode implements TupleElement<X> {
|
public abstract class AbstractTupleElement<X>
|
||||||
private final Class<X> javaType;
|
extends AbstractNode
|
||||||
|
implements TupleElementImplementor<X> {
|
||||||
|
private final Class originalJavaType;
|
||||||
|
private Class<X> javaType;
|
||||||
private String alias;
|
private String alias;
|
||||||
|
private ValueConverter.Conversion<X> conversion;
|
||||||
|
|
||||||
protected AbstractTupleElement(CriteriaBuilderImpl criteriaBuilder, Class<X> javaType) {
|
protected AbstractTupleElement(CriteriaBuilderImpl criteriaBuilder, Class<X> javaType) {
|
||||||
super( criteriaBuilder );
|
super( criteriaBuilder );
|
||||||
|
this.originalJavaType = javaType;
|
||||||
this.javaType = javaType;
|
this.javaType = javaType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +54,26 @@ public abstract class AbstractTupleElement<X> extends AbstractNode implements Tu
|
||||||
return javaType;
|
return javaType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
protected void resetJavaType(Class targetType) {
|
||||||
|
this.javaType = targetType;
|
||||||
|
// this.conversion = javaType.equals( originalJavaType )
|
||||||
|
// ? null
|
||||||
|
// : ValueConverter.determineAppropriateConversion( javaType );
|
||||||
|
this.conversion = ValueConverter.determineAppropriateConversion( javaType );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void forceConversion(ValueConverter.Conversion<X> conversion) {
|
||||||
|
this.conversion = conversion;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public ValueConverter.Conversion<X> getConversion() {
|
||||||
|
return conversion;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.ejb.criteria.expression;
|
package org.hibernate.ejb.criteria.expression;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.persistence.Tuple;
|
import javax.persistence.Tuple;
|
||||||
import javax.persistence.criteria.CompoundSelection;
|
import javax.persistence.criteria.CompoundSelection;
|
||||||
|
@ -32,6 +33,8 @@ import org.hibernate.ejb.criteria.CriteriaQueryCompiler;
|
||||||
import org.hibernate.ejb.criteria.ParameterRegistry;
|
import org.hibernate.ejb.criteria.ParameterRegistry;
|
||||||
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
||||||
import org.hibernate.ejb.criteria.Renderable;
|
import org.hibernate.ejb.criteria.Renderable;
|
||||||
|
import org.hibernate.ejb.criteria.TupleElementImplementor;
|
||||||
|
import org.hibernate.ejb.criteria.ValueConverter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Hibernate implementation of the JPA {@link CompoundSelection}
|
* The Hibernate implementation of the JPA {@link CompoundSelection}
|
||||||
|
@ -62,6 +65,21 @@ public class CompoundSelectionImpl<X> extends SelectionImpl<X> implements Compou
|
||||||
return selectionItems;
|
return selectionItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<ValueConverter.Conversion> getConversions() {
|
||||||
|
if ( isConstructor ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
boolean foundConversions = false;
|
||||||
|
ArrayList<ValueConverter.Conversion> conversions = new ArrayList<ValueConverter.Conversion>();
|
||||||
|
for ( Selection selection : getCompoundSelectionItems() ) {
|
||||||
|
ValueConverter.Conversion conversion = ( (TupleElementImplementor) selection ).getConversion();
|
||||||
|
conversions.add( conversion );
|
||||||
|
foundConversions = foundConversions || conversion != null;
|
||||||
|
}
|
||||||
|
return foundConversions ? null : conversions;
|
||||||
|
}
|
||||||
|
|
||||||
public void registerParameters(ParameterRegistry registry) {
|
public void registerParameters(ParameterRegistry registry) {
|
||||||
for ( Selection selectionItem : getCompoundSelectionItems() ) {
|
for ( Selection selectionItem : getCompoundSelectionItems() ) {
|
||||||
Helper.possibleParameter(selectionItem, registry);
|
Helper.possibleParameter(selectionItem, registry);
|
||||||
|
|
|
@ -23,11 +23,14 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.ejb.criteria.expression;
|
package org.hibernate.ejb.criteria.expression;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.math.BigInteger;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import javax.persistence.criteria.Expression;
|
import javax.persistence.criteria.Expression;
|
||||||
import javax.persistence.criteria.Predicate;
|
import javax.persistence.criteria.Predicate;
|
||||||
|
|
||||||
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
||||||
|
import org.hibernate.ejb.criteria.ExpressionImplementor;
|
||||||
import org.hibernate.ejb.criteria.expression.function.CastFunction;
|
import org.hibernate.ejb.criteria.expression.function.CastFunction;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -93,4 +96,67 @@ public abstract class ExpressionImpl<T>
|
||||||
public Predicate in(Expression<Collection<?>> values) {
|
public Predicate in(Expression<Collection<?>> values) {
|
||||||
return queryBuilder().in( this, values );
|
return queryBuilder().in( this, values );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
public ExpressionImplementor<Long> asLong() {
|
||||||
|
resetJavaType( Long.class );
|
||||||
|
return (ExpressionImplementor<Long>) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
public ExpressionImplementor<Integer> asInteger() {
|
||||||
|
resetJavaType( Integer.class );
|
||||||
|
return (ExpressionImplementor<Integer>) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
public ExpressionImplementor<Float> asFloat() {
|
||||||
|
resetJavaType( Float.class );
|
||||||
|
return (ExpressionImplementor<Float>) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
public ExpressionImplementor<Double> asDouble() {
|
||||||
|
resetJavaType( Double.class );
|
||||||
|
return (ExpressionImplementor<Double>) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
public ExpressionImplementor<BigDecimal> asBigDecimal() {
|
||||||
|
resetJavaType( BigDecimal.class );
|
||||||
|
return (ExpressionImplementor<BigDecimal>) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
public ExpressionImplementor<BigInteger> asBigInteger() {
|
||||||
|
resetJavaType( BigInteger.class );
|
||||||
|
return (ExpressionImplementor<BigInteger>) this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
public ExpressionImplementor<String> asString() {
|
||||||
|
resetJavaType( String.class );
|
||||||
|
return (ExpressionImplementor<String>) this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ package org.hibernate.ejb.criteria.expression;
|
||||||
|
|
||||||
import javax.persistence.TypedQuery;
|
import javax.persistence.TypedQuery;
|
||||||
|
|
||||||
|
import org.hibernate.ejb.criteria.ValueConverter;
|
||||||
import org.hibernate.ejb.criteria.ParameterRegistry;
|
import org.hibernate.ejb.criteria.ParameterRegistry;
|
||||||
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
||||||
import org.hibernate.ejb.criteria.CriteriaQueryCompiler;
|
import org.hibernate.ejb.criteria.CriteriaQueryCompiler;
|
||||||
|
@ -35,7 +36,7 @@ import org.hibernate.ejb.criteria.CriteriaQueryCompiler;
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public class LiteralExpression<T> extends ExpressionImpl<T> {
|
public class LiteralExpression<T> extends ExpressionImpl<T> {
|
||||||
private final T literal;
|
private Object literal;
|
||||||
|
|
||||||
@SuppressWarnings({ "unchecked" })
|
@SuppressWarnings({ "unchecked" })
|
||||||
public LiteralExpression(CriteriaBuilderImpl criteriaBuilder, T literal) {
|
public LiteralExpression(CriteriaBuilderImpl criteriaBuilder, T literal) {
|
||||||
|
@ -51,18 +52,27 @@ public class LiteralExpression<T> extends ExpressionImpl<T> {
|
||||||
this.literal = literal;
|
this.literal = literal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
public T getLiteral() {
|
public T getLiteral() {
|
||||||
return literal;
|
return (T) literal;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerParameters(ParameterRegistry registry) {
|
public void registerParameters(ParameterRegistry registry) {
|
||||||
// nothign to do
|
// nothing to do
|
||||||
}
|
}
|
||||||
|
|
||||||
public String render(CriteriaQueryCompiler.RenderingContext renderingContext) {
|
public String render(CriteriaQueryCompiler.RenderingContext renderingContext) {
|
||||||
final String parameterName = renderingContext.generateParameterName();
|
final String parameterName = renderingContext.generateParameterName();
|
||||||
renderingContext.registerImplicitParameterBinding(
|
renderingContext.registerImplicitParameterBinding(
|
||||||
new CriteriaQueryCompiler.ImplicitParameterBinding() {
|
new CriteriaQueryCompiler.ImplicitParameterBinding() {
|
||||||
|
public String getParameterName() {
|
||||||
|
return parameterName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Class getJavaType() {
|
||||||
|
return LiteralExpression.this.getJavaType();
|
||||||
|
}
|
||||||
|
|
||||||
public void bind(TypedQuery typedQuery) {
|
public void bind(TypedQuery typedQuery) {
|
||||||
typedQuery.setParameter( parameterName, getLiteral() );
|
typedQuery.setParameter( parameterName, getLiteral() );
|
||||||
}
|
}
|
||||||
|
@ -74,4 +84,19 @@ public class LiteralExpression<T> extends ExpressionImpl<T> {
|
||||||
public String renderProjection(CriteriaQueryCompiler.RenderingContext renderingContext) {
|
public String renderProjection(CriteriaQueryCompiler.RenderingContext renderingContext) {
|
||||||
return render( renderingContext );
|
return render( renderingContext );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings({ "unchecked" })
|
||||||
|
protected void resetJavaType(Class targetType) {
|
||||||
|
super.resetJavaType( targetType );
|
||||||
|
ValueConverter.Conversion conversion = getConversion();
|
||||||
|
if ( conversion == null ) {
|
||||||
|
conversion = ValueConverter.determineAppropriateConversion( targetType );
|
||||||
|
forceConversion( conversion );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( conversion != null ) {
|
||||||
|
literal = conversion.apply( literal );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,11 +23,14 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.ejb.criteria.expression;
|
package org.hibernate.ejb.criteria.expression;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.persistence.criteria.Selection;
|
import javax.persistence.criteria.Selection;
|
||||||
|
|
||||||
import org.hibernate.ejb.criteria.ParameterContainer;
|
import org.hibernate.ejb.criteria.ParameterContainer;
|
||||||
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
||||||
|
import org.hibernate.ejb.criteria.SelectionImplementor;
|
||||||
|
import org.hibernate.ejb.criteria.ValueConverter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Hibernate implementation of the JPA {@link Selection}
|
* The Hibernate implementation of the JPA {@link Selection}
|
||||||
|
@ -37,7 +40,7 @@ import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
||||||
*/
|
*/
|
||||||
public abstract class SelectionImpl<X>
|
public abstract class SelectionImpl<X>
|
||||||
extends AbstractTupleElement<X>
|
extends AbstractTupleElement<X>
|
||||||
implements Selection<X>, ParameterContainer {
|
implements SelectionImplementor<X>, ParameterContainer {
|
||||||
public SelectionImpl(CriteriaBuilderImpl criteriaBuilder, Class<X> javaType) {
|
public SelectionImpl(CriteriaBuilderImpl criteriaBuilder, Class<X> javaType) {
|
||||||
super( criteriaBuilder, javaType );
|
super( criteriaBuilder, javaType );
|
||||||
}
|
}
|
||||||
|
@ -51,6 +54,12 @@ public abstract class SelectionImpl<X>
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ValueConverter.Conversion> getConversions() {
|
||||||
|
return getConversion() == null
|
||||||
|
? null
|
||||||
|
: Collections.singletonList( (ValueConverter.Conversion) getConversion() );
|
||||||
|
}
|
||||||
|
|
||||||
public List<Selection<?>> getCompoundSelectionItems() {
|
public List<Selection<?>> getCompoundSelectionItems() {
|
||||||
throw new IllegalStateException( "Not a compund selection" );
|
throw new IllegalStateException( "Not a compund selection" );
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ package org.hibernate.ejb.criteria.predicate;
|
||||||
|
|
||||||
import javax.persistence.criteria.Expression;
|
import javax.persistence.criteria.Expression;
|
||||||
|
|
||||||
|
import org.hibernate.ejb.criteria.ValueConverter;
|
||||||
import org.hibernate.ejb.criteria.ParameterRegistry;
|
import org.hibernate.ejb.criteria.ParameterRegistry;
|
||||||
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
import org.hibernate.ejb.criteria.CriteriaBuilderImpl;
|
||||||
import org.hibernate.ejb.criteria.CriteriaQueryCompiler;
|
import org.hibernate.ejb.criteria.CriteriaQueryCompiler;
|
||||||
|
@ -62,7 +63,29 @@ public class ComparisonPredicate extends AbstractSimplePredicate implements Bina
|
||||||
super( criteriaBuilder );
|
super( criteriaBuilder );
|
||||||
this.comparisonOperator = comparisonOperator;
|
this.comparisonOperator = comparisonOperator;
|
||||||
this.leftHandSide = leftHandSide;
|
this.leftHandSide = leftHandSide;
|
||||||
this.rightHandSide = new LiteralExpression( criteriaBuilder, rightHandSide );
|
if ( Number.class.isAssignableFrom( leftHandSide.getJavaType() ) ) {
|
||||||
|
this.rightHandSide = new LiteralExpression(
|
||||||
|
criteriaBuilder,
|
||||||
|
ValueConverter.convert( rightHandSide, (Class<Number>) leftHandSide.getJavaType() )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.rightHandSide = new LiteralExpression( criteriaBuilder, rightHandSide );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public <N extends Number> ComparisonPredicate(
|
||||||
|
CriteriaBuilderImpl criteriaBuilder,
|
||||||
|
ComparisonOperator comparisonOperator,
|
||||||
|
Expression<N> leftHandSide,
|
||||||
|
Number rightHandSide) {
|
||||||
|
super( criteriaBuilder );
|
||||||
|
this.comparisonOperator = comparisonOperator;
|
||||||
|
this.leftHandSide = leftHandSide;
|
||||||
|
this.rightHandSide = new LiteralExpression<N>(
|
||||||
|
criteriaBuilder,
|
||||||
|
ValueConverter.convert( rightHandSide, leftHandSide.getJavaType() )
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ComparisonOperator getComparisonOperator() {
|
public ComparisonOperator getComparisonOperator() {
|
||||||
|
|
|
@ -0,0 +1,190 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.criteria;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.TypedQuery;
|
||||||
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
|
import javax.persistence.criteria.Root;
|
||||||
|
import javax.persistence.metamodel.EntityType;
|
||||||
|
|
||||||
|
import org.hibernate.ejb.criteria.predicate.ComparisonPredicate;
|
||||||
|
import org.hibernate.ejb.metamodel.Address;
|
||||||
|
import org.hibernate.ejb.metamodel.Alias;
|
||||||
|
import org.hibernate.ejb.metamodel.Country;
|
||||||
|
import org.hibernate.ejb.metamodel.CreditCard;
|
||||||
|
import org.hibernate.ejb.metamodel.Customer;
|
||||||
|
import org.hibernate.ejb.metamodel.Info;
|
||||||
|
import org.hibernate.ejb.metamodel.LineItem;
|
||||||
|
import org.hibernate.ejb.metamodel.Order;
|
||||||
|
import org.hibernate.ejb.metamodel.MetamodelImpl;
|
||||||
|
import org.hibernate.ejb.metamodel.Phone;
|
||||||
|
import org.hibernate.ejb.metamodel.Product;
|
||||||
|
import org.hibernate.ejb.metamodel.ShelfLife;
|
||||||
|
import org.hibernate.ejb.metamodel.Spouse;
|
||||||
|
import org.hibernate.ejb.test.TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
public class QueryBuilderTest extends TestCase {
|
||||||
|
@Override
|
||||||
|
public Class[] getAnnotatedClasses() {
|
||||||
|
return new Class[] {
|
||||||
|
Address.class,
|
||||||
|
Alias.class,
|
||||||
|
Country.class,
|
||||||
|
CreditCard.class,
|
||||||
|
Customer.class,
|
||||||
|
Info.class,
|
||||||
|
LineItem.class,
|
||||||
|
Order.class,
|
||||||
|
Phone.class,
|
||||||
|
Product.class,
|
||||||
|
ShelfLife.class,
|
||||||
|
Spouse.class
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testEqualityComparisonLiteralConversion() {
|
||||||
|
EntityManager em = getOrCreateEntityManager();
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
CriteriaBuilderImpl cb = (CriteriaBuilderImpl) em.getCriteriaBuilder();
|
||||||
|
MetamodelImpl mm = (MetamodelImpl) em.getMetamodel();
|
||||||
|
|
||||||
|
CriteriaQuery<Integer> cquery = cb.createQuery( Integer.class );
|
||||||
|
Root<Product> product = cquery.from( Product.class );
|
||||||
|
EntityType<Product> Product_ = mm.entity( Product.class );
|
||||||
|
|
||||||
|
cquery.select(
|
||||||
|
cb.toInteger(
|
||||||
|
product.get(
|
||||||
|
Product_.getSingularAttribute("quantity", Integer.class))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
ComparisonPredicate predicate = (ComparisonPredicate) cb.equal(
|
||||||
|
product.get( Product_.getSingularAttribute( "partNumber", Long.class ) ),
|
||||||
|
373767373
|
||||||
|
);
|
||||||
|
assertEquals( Long.class, predicate.getRightHandOperand().getJavaType() );
|
||||||
|
cquery.where( predicate );
|
||||||
|
em.createQuery( cquery ).getResultList();
|
||||||
|
|
||||||
|
predicate = (ComparisonPredicate) cb.ge(
|
||||||
|
cb.length( product.get( Product_.getSingularAttribute( "name", String.class ) ) ),
|
||||||
|
4L
|
||||||
|
);
|
||||||
|
assertEquals( Integer.class, predicate.getRightHandOperand().getJavaType() );
|
||||||
|
cquery.where( predicate );
|
||||||
|
em.createQuery( cquery ).getResultList();
|
||||||
|
|
||||||
|
em.getTransaction().commit();
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testTypeConversion() {
|
||||||
|
EntityManager em = getOrCreateEntityManager();
|
||||||
|
em.getTransaction().begin();
|
||||||
|
CriteriaBuilderImpl cb = (CriteriaBuilderImpl) em.getCriteriaBuilder();
|
||||||
|
MetamodelImpl mm = (MetamodelImpl) em.getMetamodel();
|
||||||
|
EntityType<Product> Product_ = mm.entity( Product.class );
|
||||||
|
|
||||||
|
// toFloat
|
||||||
|
CriteriaQuery<Float> floatQuery = cb.createQuery( Float.class );
|
||||||
|
Root<Product> product = floatQuery.from( Product.class );
|
||||||
|
floatQuery.select(
|
||||||
|
cb.toFloat(
|
||||||
|
product.get(Product_.getSingularAttribute("quantity", Integer.class))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
em.createQuery( floatQuery ).getResultList();
|
||||||
|
|
||||||
|
// toDouble
|
||||||
|
CriteriaQuery<Double> doubleQuery = cb.createQuery(Double.class);
|
||||||
|
product = doubleQuery.from( Product.class );
|
||||||
|
doubleQuery.select(
|
||||||
|
cb.toDouble(
|
||||||
|
product.get(Product_.getSingularAttribute("quantity", Integer.class))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
em.createQuery( doubleQuery ).getResultList();
|
||||||
|
|
||||||
|
em.getTransaction().commit();
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testConstructor() {
|
||||||
|
EntityManager em = getOrCreateEntityManager();
|
||||||
|
em.getTransaction().begin();
|
||||||
|
CriteriaBuilderImpl cb = (CriteriaBuilderImpl) em.getCriteriaBuilder();
|
||||||
|
MetamodelImpl mm = (MetamodelImpl) em.getMetamodel();
|
||||||
|
|
||||||
|
CriteriaQuery<Customer> cquery = cb.createQuery(Customer.class);
|
||||||
|
Root<Customer> customer = cquery.from(Customer.class);
|
||||||
|
EntityType<Customer> Customer_ = customer.getModel();
|
||||||
|
|
||||||
|
cquery.select(
|
||||||
|
cb.construct(
|
||||||
|
Customer.class,
|
||||||
|
customer.get(Customer_.getSingularAttribute("id", String.class)),
|
||||||
|
customer.get(Customer_.getSingularAttribute("name", String.class))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
TypedQuery<Customer> tq = em.createQuery(cquery);
|
||||||
|
tq.getResultList();
|
||||||
|
|
||||||
|
em.getTransaction().commit();
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testDateTimeFunctions() {
|
||||||
|
EntityManager em = getOrCreateEntityManager();
|
||||||
|
em.getTransaction().begin();
|
||||||
|
CriteriaBuilderImpl cb = (CriteriaBuilderImpl) em.getCriteriaBuilder();
|
||||||
|
MetamodelImpl mm = (MetamodelImpl) em.getMetamodel();
|
||||||
|
|
||||||
|
CriteriaQuery<java.sql.Date> dateQuery = cb.createQuery(java.sql.Date.class);
|
||||||
|
dateQuery.from( Customer.class );
|
||||||
|
dateQuery.select( cb.currentDate() );
|
||||||
|
em.createQuery( dateQuery ).getResultList();
|
||||||
|
|
||||||
|
CriteriaQuery<java.sql.Time> timeQuery = cb.createQuery(java.sql.Time.class);
|
||||||
|
timeQuery.from( Customer.class );
|
||||||
|
timeQuery.select( cb.currentTime() );
|
||||||
|
em.createQuery( timeQuery ).getResultList();
|
||||||
|
|
||||||
|
CriteriaQuery<java.sql.Timestamp> tsQuery = cb.createQuery(java.sql.Timestamp.class);
|
||||||
|
tsQuery.from( Customer.class );
|
||||||
|
tsQuery.select( cb.currentTimestamp() );
|
||||||
|
em.createQuery( tsQuery ).getResultList();
|
||||||
|
|
||||||
|
em.getTransaction().commit();
|
||||||
|
em.close();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,124 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.metamodel;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import javax.persistence.CascadeType;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "ADDRESS")
|
||||||
|
public class Address implements java.io.Serializable {
|
||||||
|
private String id;
|
||||||
|
private String street;
|
||||||
|
private String city;
|
||||||
|
private String state;
|
||||||
|
private String zip;
|
||||||
|
private Collection<Phone> phones = new java.util.ArrayList<Phone>();
|
||||||
|
|
||||||
|
public Address() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Address(String id, String street, String city, String state, String zip) {
|
||||||
|
this.id = id;
|
||||||
|
this.street = street;
|
||||||
|
this.city = city;
|
||||||
|
this.state = state;
|
||||||
|
this.zip = zip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Address(String id, String street, String city, String state, String zip,
|
||||||
|
Collection<Phone> phones) {
|
||||||
|
this.id = id;
|
||||||
|
this.street = street;
|
||||||
|
this.city = city;
|
||||||
|
this.state = state;
|
||||||
|
this.zip = zip;
|
||||||
|
this.phones = phones;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "ID")
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "STREET")
|
||||||
|
public String getStreet() {
|
||||||
|
return street;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStreet(String street) {
|
||||||
|
this.street = street;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "CITY")
|
||||||
|
public String getCity() {
|
||||||
|
return city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCity(String city) {
|
||||||
|
this.city = city;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "STATE")
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(String state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "ZIP")
|
||||||
|
public String getZip() {
|
||||||
|
return zip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setZip(String zip) {
|
||||||
|
this.zip = zip;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToMany(cascade = CascadeType.ALL, mappedBy = "address")
|
||||||
|
public Collection<Phone> getPhones() {
|
||||||
|
return phones;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhones(Collection<Phone> phones) {
|
||||||
|
this.phones = phones;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,123 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.metamodel;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import javax.persistence.CascadeType;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.JoinTable;
|
||||||
|
import javax.persistence.ManyToMany;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "ALIAS_TABLE")
|
||||||
|
public class Alias implements java.io.Serializable {
|
||||||
|
private String id;
|
||||||
|
private String alias;
|
||||||
|
private Customer customerNoop;
|
||||||
|
private Collection<Customer> customersNoop = new java.util.ArrayList<Customer>();
|
||||||
|
private Collection<Customer> customers = new java.util.ArrayList<Customer>();
|
||||||
|
|
||||||
|
public Alias() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Alias(String id, String alias) {
|
||||||
|
this.id = id;
|
||||||
|
this.alias = alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "ID")
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "ALIAS")
|
||||||
|
public String getAlias() {
|
||||||
|
return alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAlias(String alias) {
|
||||||
|
this.alias = alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToOne(cascade = CascadeType.ALL)
|
||||||
|
@JoinColumn(name = "FK1_FOR_CUSTOMER_TABLE", insertable = false, updatable = false)
|
||||||
|
public Customer getCustomerNoop() {
|
||||||
|
return customerNoop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomerNoop(Customer customerNoop) {
|
||||||
|
this.customerNoop = customerNoop;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ManyToMany(cascade = CascadeType.ALL)
|
||||||
|
@JoinTable(name = "FKS_ANOOP_CNOOP",
|
||||||
|
joinColumns =
|
||||||
|
@JoinColumn(
|
||||||
|
name = "FK2_FOR_ALIAS_TABLE", referencedColumnName = "ID"),
|
||||||
|
inverseJoinColumns =
|
||||||
|
@JoinColumn(
|
||||||
|
name = "FK8_FOR_CUSTOMER_TABLE", referencedColumnName = "ID")
|
||||||
|
)
|
||||||
|
public Collection<Customer> getCustomersNoop() {
|
||||||
|
return customersNoop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomersNoop(Collection<Customer> customersNoop) {
|
||||||
|
this.customersNoop = customersNoop;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@ManyToMany(cascade = CascadeType.ALL)
|
||||||
|
@JoinTable(name = "FKS_ALIAS_CUSTOMER",
|
||||||
|
joinColumns =
|
||||||
|
@JoinColumn(
|
||||||
|
name = "FK_FOR_ALIAS_TABLE", referencedColumnName = "ID"),
|
||||||
|
inverseJoinColumns =
|
||||||
|
@JoinColumn(
|
||||||
|
name = "FK_FOR_CUSTOMER_TABLE", referencedColumnName = "ID")
|
||||||
|
)
|
||||||
|
public Collection<Customer> getCustomers() {
|
||||||
|
return customers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomers(Collection<Customer> customers) {
|
||||||
|
this.customers = customers;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.metamodel;
|
||||||
|
|
||||||
|
import javax.persistence.Basic;
|
||||||
|
import javax.persistence.Embeddable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@Embeddable
|
||||||
|
public class Country implements java.io.Serializable {
|
||||||
|
private String country;
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
public Country() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Country(String v1, String v2) {
|
||||||
|
country = v1;
|
||||||
|
code = v2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Basic
|
||||||
|
public String getCountry() {
|
||||||
|
return country;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCountry(String v) {
|
||||||
|
country = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Basic
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCode(String v) {
|
||||||
|
code = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,153 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.metamodel;
|
||||||
|
|
||||||
|
import javax.persistence.CascadeType;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "CREDITCARD_TABLE")
|
||||||
|
public class CreditCard implements java.io.Serializable {
|
||||||
|
private String id;
|
||||||
|
private String number;
|
||||||
|
private String type;
|
||||||
|
private String expires;
|
||||||
|
private boolean approved;
|
||||||
|
private double balance;
|
||||||
|
private Order order;
|
||||||
|
private Customer customer;
|
||||||
|
|
||||||
|
public CreditCard() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public CreditCard(
|
||||||
|
String v1, String v2, String v3, String v4,
|
||||||
|
boolean v5, double v6, Order v7, Customer v8) {
|
||||||
|
id = v1;
|
||||||
|
number = v2;
|
||||||
|
type = v3;
|
||||||
|
expires = v4;
|
||||||
|
approved = v5;
|
||||||
|
balance = v6;
|
||||||
|
order = v7;
|
||||||
|
customer = v8;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CreditCard(
|
||||||
|
String v1, String v2, String v3, String v4,
|
||||||
|
boolean v5, double v6) {
|
||||||
|
id = v1;
|
||||||
|
number = v2;
|
||||||
|
type = v3;
|
||||||
|
expires = v4;
|
||||||
|
approved = v5;
|
||||||
|
balance = v6;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "ID")
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String v) {
|
||||||
|
id = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "CREDITCARD_NUMBER")
|
||||||
|
public String getNumber() {
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNumber(String v) {
|
||||||
|
number = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "TYPE")
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String v) {
|
||||||
|
type = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "EXPIRES")
|
||||||
|
public String getExpires() {
|
||||||
|
return expires;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpires(String v) {
|
||||||
|
expires = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "APPROVED")
|
||||||
|
public boolean getApproved() {
|
||||||
|
return approved;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setApproved(boolean v) {
|
||||||
|
approved = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "BALANCE")
|
||||||
|
public double getBalance() {
|
||||||
|
return balance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBalance(double v) {
|
||||||
|
balance = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToOne(cascade = CascadeType.ALL)
|
||||||
|
@JoinColumn(name = "FK_FOR_ORDER_TABLE")
|
||||||
|
public Order getOrder() {
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrder(Order v) {
|
||||||
|
order = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ManyToOne(cascade = CascadeType.ALL)
|
||||||
|
@JoinColumn(name = "FK3_FOR_CUSTOMER_TABLE")
|
||||||
|
public Customer getCustomer() {
|
||||||
|
return customer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomer(Customer v) {
|
||||||
|
customer = v;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,172 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.metamodel;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import javax.persistence.CascadeType;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Embedded;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.ManyToMany;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "CUSTOMER_TABLE")
|
||||||
|
public class Customer implements java.io.Serializable {
|
||||||
|
private String id;
|
||||||
|
private String name;
|
||||||
|
private Address home;
|
||||||
|
private Address work;
|
||||||
|
private Country country;
|
||||||
|
private Spouse spouse;
|
||||||
|
private Collection<CreditCard> creditCards = new java.util.ArrayList<CreditCard>();
|
||||||
|
private Collection<Order> orders = new java.util.ArrayList<Order>();
|
||||||
|
private Collection<Alias> aliases = new java.util.ArrayList<Alias>();
|
||||||
|
private Collection<Alias> aliasesNoop = new java.util.ArrayList<Alias>();
|
||||||
|
|
||||||
|
public Customer() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Customer(String id, String name) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Customer(String id, String name, Country country) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.country = country;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Customer(String id, String name, Address home,
|
||||||
|
Address work, Country country) {
|
||||||
|
this.id = id;
|
||||||
|
this.name = name;
|
||||||
|
this.home = home;
|
||||||
|
this.work = work;
|
||||||
|
this.country = country;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "ID")
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String v) {
|
||||||
|
this.id = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "NAME")
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String v) {
|
||||||
|
this.name = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Embedded
|
||||||
|
public Country getCountry() {
|
||||||
|
return country;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCountry(Country v) {
|
||||||
|
this.country = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToOne(cascade = CascadeType.ALL)
|
||||||
|
@JoinColumn(name = "FK6_FOR_CUSTOMER_TABLE")
|
||||||
|
public Address getHome() {
|
||||||
|
return home;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHome(Address v) {
|
||||||
|
this.home = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToOne(cascade = CascadeType.ALL)
|
||||||
|
@JoinColumn(name = "FK5_FOR_CUSTOMER_TABLE")
|
||||||
|
public Address getWork() {
|
||||||
|
return work;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWork(Address v) {
|
||||||
|
this.work = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToOne(cascade = CascadeType.ALL, mappedBy = "customer")
|
||||||
|
public Spouse getSpouse() {
|
||||||
|
return spouse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpouse(Spouse v) {
|
||||||
|
this.spouse = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToMany(cascade = CascadeType.ALL, mappedBy = "customer")
|
||||||
|
public Collection<CreditCard> getCreditCards() {
|
||||||
|
return creditCards;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreditCards(Collection<CreditCard> v) {
|
||||||
|
this.creditCards = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToMany(cascade = CascadeType.ALL, mappedBy = "customer")
|
||||||
|
public Collection<Order> getOrders() {
|
||||||
|
return orders;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrders(Collection<Order> v) {
|
||||||
|
this.orders = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "customers")
|
||||||
|
public Collection<Alias> getAliases() {
|
||||||
|
return aliases;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAliases(Collection<Alias> v) {
|
||||||
|
this.aliases = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ManyToMany(cascade = CascadeType.ALL, mappedBy = "customersNoop")
|
||||||
|
public Collection<Alias> getAliasesNoop() {
|
||||||
|
return aliasesNoop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAliasesNoop(Collection<Alias> v) {
|
||||||
|
this.aliasesNoop = v;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,124 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.metamodel;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "INFO_TABLE")
|
||||||
|
public class Info implements java.io.Serializable {
|
||||||
|
private String id;
|
||||||
|
private String street;
|
||||||
|
private String city;
|
||||||
|
private String state;
|
||||||
|
private String zip;
|
||||||
|
private Spouse spouse;
|
||||||
|
|
||||||
|
public Info() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Info(String v1, String v2, String v3, String v4, String v5) {
|
||||||
|
id = v1;
|
||||||
|
street = v2;
|
||||||
|
city = v3;
|
||||||
|
state = v4;
|
||||||
|
zip = v5;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Info(
|
||||||
|
String v1, String v2, String v3, String v4,
|
||||||
|
String v5, Spouse v6) {
|
||||||
|
id = v1;
|
||||||
|
street = v2;
|
||||||
|
city = v3;
|
||||||
|
state = v4;
|
||||||
|
zip = v5;
|
||||||
|
spouse = v6;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "ID")
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String v) {
|
||||||
|
id = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "INFOSTREET")
|
||||||
|
public String getStreet() {
|
||||||
|
return street;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStreet(String v) {
|
||||||
|
street = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "INFOSTATE")
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(String v) {
|
||||||
|
state = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "INFOCITY")
|
||||||
|
public String getCity() {
|
||||||
|
return city;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCity(String v) {
|
||||||
|
city = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "INFOZIP")
|
||||||
|
public String getZip() {
|
||||||
|
return zip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setZip(String v) {
|
||||||
|
zip = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToOne(mappedBy = "info")
|
||||||
|
public Spouse getSpouse() {
|
||||||
|
return spouse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSpouse(Spouse v) {
|
||||||
|
this.spouse = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.metamodel;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "LINEITEM_TABLE")
|
||||||
|
public class LineItem implements java.io.Serializable {
|
||||||
|
private String id;
|
||||||
|
private int quantity;
|
||||||
|
private Order order;
|
||||||
|
private Product product;
|
||||||
|
|
||||||
|
public LineItem() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public LineItem(String v1, int v2, Order v3, Product v4) {
|
||||||
|
id = v1;
|
||||||
|
quantity = v2;
|
||||||
|
order = v3;
|
||||||
|
product = v4;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LineItem(String v1, int v2) {
|
||||||
|
id = v1;
|
||||||
|
quantity = v2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "ID")
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String v) {
|
||||||
|
id = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "QUANTITY")
|
||||||
|
public int getQuantity() {
|
||||||
|
return quantity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setQuantity(int v) {
|
||||||
|
quantity = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "FK1_FOR_ORDER_TABLE")
|
||||||
|
public Order getOrder() {
|
||||||
|
return order;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrder(Order v) {
|
||||||
|
order = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "FK_FOR_PRODUCT_TABLE")
|
||||||
|
public Product getProduct() {
|
||||||
|
return product;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProduct(Product v) {
|
||||||
|
product = v;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,141 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.metamodel;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import javax.persistence.CascadeType;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.OneToMany;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "ORDER_TABLE")
|
||||||
|
public class Order implements java.io.Serializable {
|
||||||
|
private String id;
|
||||||
|
private double totalPrice;
|
||||||
|
private Customer customer;
|
||||||
|
private CreditCard creditCard;
|
||||||
|
private LineItem sampleLineItem;
|
||||||
|
private Collection<LineItem> lineItems = new java.util.ArrayList<LineItem>();
|
||||||
|
|
||||||
|
public Order() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Order(String id, double totalPrice) {
|
||||||
|
this.id = id;
|
||||||
|
this.totalPrice = totalPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Order(String id, Customer customer) {
|
||||||
|
this.id = id;
|
||||||
|
this.customer = customer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Order(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
//====================================================================
|
||||||
|
// getters and setters for State fields
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "ID")
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "TOTALPRICE")
|
||||||
|
public double getTotalPrice() {
|
||||||
|
return totalPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTotalPrice(double price) {
|
||||||
|
this.totalPrice = price;
|
||||||
|
}
|
||||||
|
|
||||||
|
//====================================================================
|
||||||
|
// getters and setters for Association fields
|
||||||
|
|
||||||
|
// MANYx1
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(
|
||||||
|
name = "FK4_FOR_CUSTOMER_TABLE")
|
||||||
|
public Customer getCustomer() {
|
||||||
|
return customer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomer(Customer customer) {
|
||||||
|
this.customer = customer;
|
||||||
|
}
|
||||||
|
|
||||||
|
//1x1
|
||||||
|
|
||||||
|
@OneToOne(mappedBy = "order")
|
||||||
|
public CreditCard getCreditCard() {
|
||||||
|
return creditCard;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreditCard(CreditCard cc) {
|
||||||
|
this.creditCard = cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1x1
|
||||||
|
|
||||||
|
@OneToOne(cascade = CascadeType.REMOVE)
|
||||||
|
@JoinColumn(
|
||||||
|
name = "FK0_FOR_LINEITEM_TABLE")
|
||||||
|
public LineItem getSampleLineItem() {
|
||||||
|
return sampleLineItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSampleLineItem(LineItem l) {
|
||||||
|
this.sampleLineItem = l;
|
||||||
|
}
|
||||||
|
|
||||||
|
//1xMANY
|
||||||
|
|
||||||
|
@OneToMany(cascade = CascadeType.ALL, mappedBy = "order")
|
||||||
|
public Collection<LineItem> getLineItems() {
|
||||||
|
return lineItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLineItems(Collection<LineItem> c) {
|
||||||
|
this.lineItems = c;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,99 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.metamodel;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.ManyToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "PHONE_TABLE")
|
||||||
|
public class Phone implements java.io.Serializable {
|
||||||
|
private String id;
|
||||||
|
private String area;
|
||||||
|
private String number;
|
||||||
|
private Address address;
|
||||||
|
|
||||||
|
public Phone() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Phone(String v1, String v2, String v3) {
|
||||||
|
id = v1;
|
||||||
|
area = v2;
|
||||||
|
number = v3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Phone(String v1, String v2, String v3, Address v4) {
|
||||||
|
id = v1;
|
||||||
|
area = v2;
|
||||||
|
number = v3;
|
||||||
|
address = v4;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "ID")
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String v) {
|
||||||
|
id = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "AREA")
|
||||||
|
public String getArea() {
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setArea(String v) {
|
||||||
|
area = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "PHONE_NUMBER")
|
||||||
|
public String getNumber() {
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNumber(String v) {
|
||||||
|
number = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name = "FK_FOR_ADDRESS")
|
||||||
|
public Address getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddress(Address a) {
|
||||||
|
address = a;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,143 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, Red Hat Inc. or third-party contributors as
|
||||||
|
* indicated by the @author tags or express copyright attribution
|
||||||
|
* statements applied by the authors. All third-party contributions are
|
||||||
|
* distributed under license by Red Hat Inc.
|
||||||
|
*
|
||||||
|
* This copyrighted material is made available to anyone wishing to use, modify,
|
||||||
|
* copy, or redistribute it subject to the terms and conditions of the GNU
|
||||||
|
* Lesser General Public License, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with this distribution; if not, write to:
|
||||||
|
* Free Software Foundation, Inc.
|
||||||
|
* 51 Franklin Street, Fifth Floor
|
||||||
|
* Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
package org.hibernate.ejb.metamodel;
|
||||||
|
|
||||||
|
import javax.persistence.CascadeType;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.JoinColumn;
|
||||||
|
import javax.persistence.OneToOne;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO : javadoc
|
||||||
|
*
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "SPOUSE_TABLE")
|
||||||
|
public class Spouse implements java.io.Serializable {
|
||||||
|
private String id;
|
||||||
|
private String first;
|
||||||
|
private String maiden;
|
||||||
|
private String last;
|
||||||
|
private String sNumber;
|
||||||
|
private Info info;
|
||||||
|
private Customer customer;
|
||||||
|
|
||||||
|
public Spouse() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Spouse(
|
||||||
|
String v1, String v2, String v3, String v4,
|
||||||
|
String v5, Info v6) {
|
||||||
|
id = v1;
|
||||||
|
first = v2;
|
||||||
|
maiden = v3;
|
||||||
|
last = v4;
|
||||||
|
sNumber = v5;
|
||||||
|
info = v6;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Spouse(
|
||||||
|
String v1, String v2, String v3, String v4,
|
||||||
|
String v5, Info v6, Customer v7) {
|
||||||
|
id = v1;
|
||||||
|
first = v2;
|
||||||
|
maiden = v3;
|
||||||
|
last = v4;
|
||||||
|
sNumber = v5;
|
||||||
|
info = v6;
|
||||||
|
customer = v7;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Column(name = "ID")
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String v) {
|
||||||
|
id = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "FIRSTNAME")
|
||||||
|
public String getFirstName() {
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFirstName(String v) {
|
||||||
|
first = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "MAIDENNAME")
|
||||||
|
public String getMaidenName() {
|
||||||
|
return maiden;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaidenName(String v) {
|
||||||
|
maiden = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "LASTNAME")
|
||||||
|
public String getLastName() {
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLastName(String v) {
|
||||||
|
last = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Column(name = "SOCSECNUM")
|
||||||
|
public String getSocialSecurityNumber() {
|
||||||
|
return sNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSocialSecurityNumber(String v) {
|
||||||
|
sNumber = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToOne(cascade = CascadeType.ALL)
|
||||||
|
@JoinColumn(name = "FK_FOR_INFO_TABLE")
|
||||||
|
public Info getInfo() {
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInfo(Info v) {
|
||||||
|
info = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@OneToOne(cascade = CascadeType.ALL)
|
||||||
|
@JoinColumn(name = "FK7_FOR_CUSTOMER_TABLE")
|
||||||
|
public Customer getCustomer() {
|
||||||
|
return customer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCustomer(Customer v) {
|
||||||
|
customer = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue