diff --git a/querydsl-core/src/main/java/com/mysema/query/JoinExpression.java b/querydsl-core/src/main/java/com/mysema/query/JoinExpression.java index 4a844fce5..1b2c7341e 100644 --- a/querydsl-core/src/main/java/com/mysema/query/JoinExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/JoinExpression.java @@ -5,7 +5,10 @@ */ package com.mysema.query; +import org.apache.commons.lang.builder.EqualsBuilder; + import com.mysema.query.grammar.types.Expr; +import com.mysema.query.util.Assert; /** * JoinExpression represents a join element in a Query instance @@ -21,13 +24,13 @@ public class JoinExpression { public JoinExpression(JoinType type, Expr target) { this.type = type; - this.target = target; + this.target = Assert.notNull(target); this.metadata = null; } public JoinExpression(JoinType type, Expr target, T metadata) { this.type = type; - this.target = target; + this.target = Assert.notNull(target); this.metadata = metadata; } @@ -55,4 +58,23 @@ public class JoinExpression { return type + " " + target; } + @Override + public int hashCode(){ + return target.hashCode(); + } + + @Override + public boolean equals(Object o){ + if (o instanceof JoinExpression){ + JoinExpression j = (JoinExpression)o; + return new EqualsBuilder() + .append(condition, j.condition) + .append(metadata, j.metadata) + .append(target, j.target) + .append(type, j.type).isEquals(); + }else{ + return false; + } + } + } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/Expr.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/Expr.java index eba61c8a3..34f5f4977 100644 --- a/querydsl-core/src/main/java/com/mysema/query/grammar/types/Expr.java +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/Expr.java @@ -24,7 +24,7 @@ import com.mysema.query.util.NumberUtil; * @author tiwe * @version $Id$ */ -public abstract class Expr { +public abstract class Expr{ private final Class type; private String toString; diff --git a/querydsl-core/src/main/java/com/mysema/query/grammar/types/Operation.java b/querydsl-core/src/main/java/com/mysema/query/grammar/types/Operation.java index 84f9a54e7..2b813b96f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/grammar/types/Operation.java +++ b/querydsl-core/src/main/java/com/mysema/query/grammar/types/Operation.java @@ -37,7 +37,9 @@ public interface Operation { } public Expr[] getArgs() {return args;} public Op getOperator() {return op;} - + public OBoolean clone(){ + return new OBoolean(op, args.clone()); + } } /** @@ -56,7 +58,10 @@ public interface Operation { this(null, op, args); } public Expr[] getArgs() {return args;} - public Op getOperator() {return op;} + public Op getOperator() {return op;} + public OComparable clone(){ + return new OComparable((Class)getType(), op, args.clone()); + } } /** @@ -75,7 +80,10 @@ public interface Operation { this(null, op, args); } public Expr[] getArgs() {return args;} - public Op getOperator() {return op;} + public Op getOperator() {return op;} + public ONumber clone(){ + return new ONumber((Class)getType(), op, args.clone()); + } } /** @@ -90,6 +98,9 @@ public interface Operation { } public Expr[] getArgs() {return args;} public Op getOperator() {return op;} + public OString clone(){ + return new OString(op, args.clone()); + } } public static class OStringArray extends Expr implements Operation{ @@ -102,6 +113,9 @@ public interface Operation { } public Expr[] getArgs() {return args;} public Op getOperator() {return op;} + public OStringArray clone(){ + return new OStringArray(op, args.clone()); + } } }