This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 83177d99df4d3988e4ca6ca72b716ee2fa41eade
Author: Nikita Timofeev <stari...@gmail.com>
AuthorDate: Thu Jun 30 17:55:27 2022 +0300

    CAY-2737 Cayenne 4.3: cleanup deprecated code
     - remove old Property class
---
 .../org/apache/cayenne/lifecycle/db/auto/_E3.java  |   5 +-
 .../org/apache/cayenne/lifecycle/db/auto/_E4.java  |   5 +-
 .../apache/cayenne/lifecycle/db/auto/_SortDep.java |   5 +-
 .../cayenne/lifecycle/db/auto/_SortRoot.java       |   5 +-
 .../cayenne/lifecycle/db/auto/_UuidRoot1.java      |   5 +-
 .../main/java/org/apache/cayenne/exp/Property.java | 452 -------------------
 .../apache/cayenne/exp/property/BaseProperty.java  |  13 -
 .../org/apache/cayenne/query/ColumnSelect.java     |  20 -
 .../org/apache/cayenne/query/ObjectSelect.java     |  20 -
 .../java/org/apache/cayenne/exp/PropertyTest.java  | 494 ---------------------
 .../auto/_Author.java                              |   5 +-
 .../auto/_Song.java                                |   8 +-
 12 files changed, 23 insertions(+), 1014 deletions(-)

diff --git 
a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E3.java 
b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E3.java
index 2bc35b97c..f646337d4 100644
--- 
a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E3.java
+++ 
b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E3.java
@@ -3,7 +3,8 @@ package org.apache.cayenne.lifecycle.db.auto;
 import java.util.List;
 
 import org.apache.cayenne.CayenneDataObject;
-import org.apache.cayenne.exp.Property;
+import org.apache.cayenne.exp.property.ListProperty;
+import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.lifecycle.db.E4;
 
 /**
@@ -18,7 +19,7 @@ public abstract class _E3 extends CayenneDataObject {
 
     public static final String ID_PK_COLUMN = "ID";
 
-    public static final Property<List<E4>> E4S = Property.create("e4s", 
List.class);
+    public static final ListProperty<E4> E4S = 
PropertyFactory.createList("e4s", E4.class);
 
     public void addToE4s(E4 obj) {
         addToManyTarget("e4s", obj, true);
diff --git 
a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E4.java 
b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E4.java
index 42ea901df..5298d361a 100644
--- 
a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E4.java
+++ 
b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_E4.java
@@ -3,7 +3,8 @@ package org.apache.cayenne.lifecycle.db.auto;
 import java.util.List;
 
 import org.apache.cayenne.CayenneDataObject;
-import org.apache.cayenne.exp.Property;
+import org.apache.cayenne.exp.property.ListProperty;
+import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.lifecycle.db.E3;
 
 /**
@@ -18,7 +19,7 @@ public abstract class _E4 extends CayenneDataObject {
 
     public static final String ID_PK_COLUMN = "ID";
 
-    public static final Property<List<E3>> E3S = Property.create("e3s", 
List.class);
+    public static final ListProperty<E3> E3S = 
PropertyFactory.createList("e3s", E3.class);
 
     public void addToE3s(E3 obj) {
         addToManyTarget("e3s", obj, true);
diff --git 
a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortDep.java
 
b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortDep.java
index 83b82d6b7..d5d20a3d1 100644
--- 
a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortDep.java
+++ 
b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortDep.java
@@ -1,7 +1,8 @@
 package org.apache.cayenne.lifecycle.db.auto;
 
 import org.apache.cayenne.CayenneDataObject;
-import org.apache.cayenne.exp.Property;
+import org.apache.cayenne.exp.property.EntityProperty;
+import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.lifecycle.db.SortRoot;
 
 /**
@@ -16,7 +17,7 @@ public abstract class _SortDep extends CayenneDataObject {
 
     public static final String ID_PK_COLUMN = "ID";
 
-    public static final Property<SortRoot> ROOT = Property.create("root", 
SortRoot.class);
+    public static final EntityProperty<SortRoot> ROOT = 
PropertyFactory.createEntity("root", SortRoot.class);
 
     public void setRoot(SortRoot root) {
         setToOneTarget("root", root, true);
diff --git 
a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortRoot.java
 
b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortRoot.java
index 45991eee3..6172c713e 100644
--- 
a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortRoot.java
+++ 
b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_SortRoot.java
@@ -3,7 +3,8 @@ package org.apache.cayenne.lifecycle.db.auto;
 import java.util.List;
 
 import org.apache.cayenne.CayenneDataObject;
-import org.apache.cayenne.exp.Property;
+import org.apache.cayenne.exp.property.ListProperty;
+import org.apache.cayenne.exp.property.PropertyFactory;
 import org.apache.cayenne.lifecycle.db.SortDep;
 
 /**
@@ -18,7 +19,7 @@ public abstract class _SortRoot extends CayenneDataObject {
 
     public static final String ID_PK_COLUMN = "ID";
 
-    public static final Property<List<SortDep>> DEPS = Property.create("deps", 
List.class);
+    public static final ListProperty<SortDep> DEPS = 
PropertyFactory.createList("deps", SortDep.class);
 
     public void addToDeps(SortDep obj) {
         addToManyTarget("deps", obj, true);
diff --git 
a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_UuidRoot1.java
 
b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_UuidRoot1.java
index a9ad9bc96..e81912af9 100644
--- 
a/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_UuidRoot1.java
+++ 
b/cayenne-lifecycle/src/test/java/org/apache/cayenne/lifecycle/db/auto/_UuidRoot1.java
@@ -1,7 +1,8 @@
 package org.apache.cayenne.lifecycle.db.auto;
 
 import org.apache.cayenne.CayenneDataObject;
-import org.apache.cayenne.exp.Property;
+import org.apache.cayenne.exp.property.PropertyFactory;
+import org.apache.cayenne.exp.property.StringProperty;
 
 /**
  * Class _UuidRoot1 was generated by Cayenne.
@@ -15,7 +16,7 @@ public abstract class _UuidRoot1 extends CayenneDataObject {
 
     public static final String ID_PK_COLUMN = "ID";
 
-    public static final Property<String> UUID = Property.create("uuid", 
String.class);
+    public static final StringProperty<String> UUID = 
PropertyFactory.createString("uuid", String.class);
 
     public void setUuid(String uuid) {
         writeProperty("uuid", uuid);
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java 
b/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java
deleted file mode 100644
index f214a0763..000000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/exp/Property.java
+++ /dev/null
@@ -1,452 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.exp;
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.Persistent;
-import org.apache.cayenne.exp.property.BaseProperty;
-import org.apache.cayenne.exp.property.ComparableProperty;
-import org.apache.cayenne.exp.property.RelationshipProperty;
-
-/**
- * <p>
- * A property in a {@link org.apache.cayenne.DataObject}.
- * </p>
- * <p>
- * Used to construct Expressions quickly and with type-safety, and to 
construct Orderings.
- * </p>
- * <p>
- * Instances of this class are immutable.
- * </p>
- * <p>
- * Must be created via factory methods {@link Property#create(String, Class) 
Property.create(..)}
- * </p>
- *
- * @param <E> The type this property returns.
- *
- * @see Property#create(String, Class)
- * @see Property#create(Expression, Class)
- * @see Property#create(String, Expression, Class)
- *
- * @see org.apache.cayenne.exp.property.PropertyFactory
- *
- * @since 4.0
- * @deprecated since 4.2 in favour of type-specific set of properties, see 
{@link org.apache.cayenne.exp.property.PropertyFactory}
- * and {@link org.apache.cayenne.exp.property} package.
- */
-@Deprecated
-public class Property<E> extends BaseProperty<E> implements 
ComparableProperty<E>, RelationshipProperty<E> {
-
-    /**
-     * <p>Property that can be used in COUNT(*) queries</p>
-     * <p>
-     * <pre>{@code
-     * List<Object[]> result = ObjectSelect
-     *         .columnQuery(Artist.class, Property.COUNT, Artist.ARTIST_NAME)
-     *         .having(Property.COUNT.gt(1L))
-     *         .select(context);
-     * }</pre>
-     * </p>
-     * @deprecated since 4.2 use {@link 
org.apache.cayenne.exp.property.PropertyFactory#COUNT}
-     */
-    @Deprecated
-    public static final Property<Long> COUNT = 
Property.create(FunctionExpressionFactory.countExp(), Long.class);
-
-    /**
-     * Constructs a new property with the given name and type.
-     *
-     * @param name of the property (usually it's obj path)
-     * @param type of the property
-     *
-     * @see Property#create(String, Class)
-     */
-    protected Property(final String name, final Class<E> type) {
-        super(name, null, type);
-    }
-
-    /**
-     * Constructs a new property with the given name and expression
-     *
-     * @param name of the property (will be used as alias for the expression)
-     * @param expression expression for property
-     * @param type of the property
-     *
-     * @see Property#create(String, Expression, Class)
-     */
-    protected Property(final String name, final Expression expression, final 
Class<E> type) {
-        super(name, expression, type);
-    }
-
-    /**
-     * @param pattern a pattern matching property value. Pattern may include 
"_" and
-     *                "%" wildcard symbols to match any single character or a
-     *                sequence of characters. To prevent "_" and "%" from being
-     *                treated as wildcards, they need to be escaped and escape 
char
-     *                passed with {@link #like(String, char)} method.
-     * @return An expression for a Database "LIKE" query.
-     */
-    public Expression like(String pattern) {
-        return ExpressionFactory.likeExp(path(), pattern);
-    }
-
-    /**
-     * @param pattern    a properly escaped pattern matching property value. 
Pattern
-     *                   may include "_" and "%" wildcard symbols to match any 
single
-     *                   character or a sequence of characters.
-     * @param escapeChar an escape character used in the pattern to escape "%" 
and "_".
-     * @return An expression for a Database "LIKE" query.
-     */
-    public Expression like(String pattern, char escapeChar) {
-        return ExpressionFactory.likeExp(path(), pattern, escapeChar);
-    }
-
-    /**
-     * @return An expression for a case insensitive "LIKE" query.
-     */
-    public Expression likeIgnoreCase(String pattern) {
-        return ExpressionFactory.likeIgnoreCaseExp(path(), pattern);
-    }
-
-    /**
-     * @return An expression for a Database "NOT LIKE" query.
-     */
-    public Expression nlike(String value) {
-        return ExpressionFactory.notLikeExp(path(), value);
-    }
-
-    /**
-     * @return An expression for a case insensitive "NOT LIKE" query.
-     */
-    public Expression nlikeIgnoreCase(String value) {
-        return ExpressionFactory.notLikeIgnoreCaseExp(path(), value);
-    }
-
-    /**
-     * Creates an expression for a database "LIKE" query with the value 
converted to a pattern matching anywhere in the
-     * String.
-     *
-     * @param substring a String to match against property value. "_" and "%" 
symbols
-     *                  are NOT treated as wildcards and are escaped when 
converted to
-     *                  a LIKE expression.
-     * @return a newly created expression.
-     */
-    public Expression contains(String substring) {
-        return ExpressionFactory.containsExp(path(), substring);
-    }
-
-    /**
-     * Creates an expression for a database "LIKE" query with the value 
converted to a pattern matching the beginning of
-     * a String.
-     *
-     * @param value a String to match against property value. "_" and "%" 
symbols
-     *              are NOT treated as wildcards and are escaped when 
converted to
-     *              a LIKE expression.
-     * @return a newly created expression.
-     */
-    public Expression startsWith(String value) {
-        return ExpressionFactory.startsWithExp(path(), value);
-    }
-
-    /**
-     * Creates an expression for a database "LIKE" query with the value
-     * converted to a pattern matching the tail of a String.
-     *
-     * @param value a String to match against property value. "_" and "%" 
symbols
-     *              are NOT treated as wildcards and are escaped when 
converted to
-     *              a LIKE expression.
-     * @return a newly created expression.
-     */
-    public Expression endsWith(String value) {
-        return ExpressionFactory.endsWithExp(path(), value);
-    }
-
-    /**
-     * Same as {@link #contains(String)}, only using case-insensitive
-     * comparison.
-     */
-    public Expression containsIgnoreCase(String value) {
-        return ExpressionFactory.containsIgnoreCaseExp(path(), value);
-    }
-
-    /**
-     * Same as {@link #startsWith(String)}, only using case-insensitive
-     * comparison.
-     */
-    public Expression startsWithIgnoreCase(String value) {
-        return ExpressionFactory.startsWithIgnoreCaseExp(path(), value);
-    }
-
-    /**
-     * Same as {@link #endsWith(String)}, only using case-insensitive
-     * comparison.
-     */
-    public Expression endsWithIgnoreCase(String value) {
-        return ExpressionFactory.endsWithIgnoreCaseExp(path(), value);
-    }
-
-    /**
-     * @see FunctionExpressionFactory#lengthExp(Expression)
-     */
-    public Property<Integer> length() {
-        return create(FunctionExpressionFactory.lengthExp(path()), 
Integer.class);
-    }
-
-    /**
-     * @see FunctionExpressionFactory#locateExp(String, Expression)
-     */
-    public Property<Integer> locate(String string) {
-        return 
create(FunctionExpressionFactory.locateExp(ExpressionFactory.wrapScalarValue(string),
 path()), Integer.class);
-    }
-
-    /**
-     * @see FunctionExpressionFactory#locateExp(Expression, Expression)
-     */
-    public Property<Integer> locate(Property<? extends String> property) {
-        return create(FunctionExpressionFactory.locateExp(property.path(), 
path()), Integer.class);
-    }
-
-    /**
-     * @see FunctionExpressionFactory#trimExp(Expression)
-     */
-    public Property<String> trim() {
-        return create(FunctionExpressionFactory.trimExp(path()), String.class);
-    }
-
-    /**
-     * @see FunctionExpressionFactory#upperExp(Expression)
-     */
-    public Property<String> upper() {
-        return create(FunctionExpressionFactory.upperExp(path()), 
String.class);
-    }
-
-    /**
-     * @see FunctionExpressionFactory#lowerExp(Expression)
-     */
-    public Property<String> lower() {
-        return create(FunctionExpressionFactory.lowerExp(path()), 
String.class);
-    }
-
-    /**
-     * <p>Arguments will be converted as follows:
-     * <ul>
-     *      <li>if argument is a {@link Property} than its expression will be 
used</li>
-     *      <li>if argument is a {@link Expression} than it will be used as is 
</li>
-     *      <li>all other values will be converted to String</li>
-     * </ul>
-     * </p>
-     * <p>
-     *     Usage:
-     *     <pre>{@code
-     *     Property<String> fullName = Artist.FIRST_NAME.concat(" ", 
Artist.SECOND_NAME);
-     *     }</pre>
-     * </p>
-     * @see FunctionExpressionFactory#concatExp(Expression...)
-     */
-    public Property<String> concat(Object... args) {
-        Expression[] exp = new Expression[args.length + 1];
-        int i = 0;
-        exp[i++] = path();
-        for(Object arg : args) {
-            if(arg instanceof org.apache.cayenne.exp.property.Property) {
-                exp[i++] = ((org.apache.cayenne.exp.property.Property<?>) 
arg).getExpression();
-            } else if(arg instanceof Expression) {
-                exp[i++] = (Expression) arg;
-            } else if(arg != null) {
-                exp[i++] = ExpressionFactory.wrapScalarValue(arg.toString());
-            }
-        }
-        return create(FunctionExpressionFactory.concatExp(exp), String.class);
-    }
-
-    /**
-     * @see FunctionExpressionFactory#substringExp(Expression, int, int)
-     */
-    public Property<String> substring(int offset, int length) {
-        return create(FunctionExpressionFactory.substringExp(path(), offset, 
length), String.class);
-    }
-
-    // TODO: end of StringProperty related methods
-
-    // TODO: start of NumericProperty related methods
-
-    /**
-     * @see FunctionExpressionFactory#avgExp(Expression)
-     */
-    public Property<E> avg() {
-        return create(FunctionExpressionFactory.avgExp(path()), getType());
-    }
-
-    /**
-     * @see FunctionExpressionFactory#sumExp(Expression)
-     */
-    public Property<E> sum() {
-        return create(FunctionExpressionFactory.sumExp(path()), getType());
-    }
-
-    /**
-     * @see FunctionExpressionFactory#modExp(Expression, Number)
-     */
-    public Property<E> mod(Number number) {
-        return create(FunctionExpressionFactory.modExp(path(), number), 
getType());
-    }
-
-    /**
-     * @see FunctionExpressionFactory#absExp(Expression)
-     */
-    public Property<E> abs() {
-        return create(FunctionExpressionFactory.absExp(path()), getType());
-    }
-
-    /**
-     * @see FunctionExpressionFactory#sqrtExp(Expression)
-     */
-    public Property<E> sqrt() {
-        return create(FunctionExpressionFactory.sqrtExp(path()), getType());
-    }
-
-    // TODO: end of NumericProperty related methods
-
-    /**
-     * <p>Create new "flat" property for toMany relationship.</p>
-     * <p>
-     *     Example:
-     *     <pre>{@code
-     *     List<Object[]> result = ObjectSelect
-     *          .columnQuery(Artist.class, Artist.ARTIST_NAME, 
Artist.PAINTING_ARRAY.flat(Painting.class))
-     *          .select(context);
-     *     }</pre>
-     * </p>
-     */
-    public <T extends Persistent> Property<T> flat(Class<T> tClass) {
-        if(!Collection.class.isAssignableFrom(type) && 
!Map.class.isAssignableFrom(type)) {
-            throw new CayenneRuntimeException("Can use flat() function only on 
Property mapped on toMany relationship.");
-        }
-        return create(ExpressionFactory.fullObjectExp(path()), tClass);
-    }
-
-    /**
-     * Creates alias with different name for this property
-     */
-    @Override
-    public Property<E> alias(String alias) {
-        return new Property<>(alias, this.getExpression(), this.getType());
-    }
-
-    @Override
-    public Property<E> outer() {
-        return getName().endsWith("+")
-                ? this
-                : Property.create(getName() + "+", getType());
-    }
-
-    public <T> Property<T> dot(Property<T> property) {
-        return Property.create(getName() + "." + property.getName(), 
property.getType());
-    }
-
-    /**
-     * Constructs a property path by appending the argument to the existing 
property separated by a dot.
-     *
-     * @return a newly created Property object.
-     */
-    @Override
-    public Property<Object> dot(String property) {
-        return Property.create(getName() + "." + property, null);
-    }
-
-    // TODO: this method has incompatible return type in BaseProperty
-//    /**
-//     * @see FunctionExpressionFactory#countExp(Expression)
-//     */
-//    @Override
-//    public NumericProperty<Long> count() {
-//        return 
Property.create(FunctionExpressionFactory.countExp(getExpression()), 
Long.class);
-//    }
-
-    /**
-     * @see FunctionExpressionFactory#maxExp(Expression)
-     */
-    @Override
-    public Property<E> max() {
-        return Property.create(FunctionExpressionFactory.maxExp(path()), 
getType());
-    }
-
-    /**
-     * @see FunctionExpressionFactory#minExp(Expression)
-     */
-    @Override
-    public Property<E> min() {
-        return Property.create(FunctionExpressionFactory.minExp(path()), 
getType());
-    }
-
-    /**
-     * Creates property with name and type
-     * @see Property#create(Expression, Class)
-     * @see Property#create(String, Expression, Class)
-     */
-    @SuppressWarnings("unchecked")
-    public static <T> Property<T> create(String name, Class<? super T> type) {
-        return (Property<T>)new Property<>(name, type);
-    }
-
-    /**
-     * Creates property with expression and type
-     * @see Property#create(String, Class)
-     * @see Property#create(String, Expression, Class)
-     */
-    @SuppressWarnings("unchecked")
-    public static <T> Property<T> create(Expression expression, Class<? super 
T> type) {
-        return (Property<T>)new Property<>(null, expression, type);
-    }
-
-    /**
-     * Creates property with name, expression and type
-     * @see Property#create(String, Class)
-     * @see Property#create(Expression, Class)
-     */
-    @SuppressWarnings("unchecked")
-    public static <T> Property<T> create(String name, Expression expression, 
Class<? super T> type) {
-        return (Property<T>)new Property<>(name, expression, type);
-    }
-
-    /**
-     * <p>
-     * Creates "self" Property for persistent class.
-     * This property can be used to select full object along with some of it 
properties (or
-     * properties that can be resolved against query root)
-     * </p>
-     * <p>
-     *     Here is sample code, that will select all Artists and count of 
their Paintings:
-     *     <pre>{@code
-     *     Property<Artist> artistFull = Property.createSelf(Artist.class);
-     *     List<Object[]> result = ObjectSelect
-     *          .columnQuery(Artist.class, artistFull, 
Artist.PAINTING_ARRAY.count())
-     *          .select(context);
-     *     }
-     *     </pre>
-     * </p>
-     */
-    @SuppressWarnings("unchecked")
-    public static <T extends Persistent> Property<T> createSelf(Class<? super 
T> type) {
-        return (Property<T>)new Property<>(null, 
ExpressionFactory.fullObjectExp(), type);
-    }
-
-}
\ No newline at end of file
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java
 
b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java
index 2e1a05fe0..478de4784 100644
--- 
a/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java
+++ 
b/cayenne-server/src/main/java/org/apache/cayenne/exp/property/BaseProperty.java
@@ -152,19 +152,6 @@ public class BaseProperty<E> implements Property<E> {
         return (type == null ? property.type == null : 
type.equals(property.type));
     }
 
-    /**
-     * Converts this property to a path expression.
-     * This method is equivalent of getExpression() which is preferred as more 
generic.
-     *
-     * @return a newly created expression.
-     * @see BaseProperty#getExpression()
-     * @deprecated since 4.2, use {@link #getExpression()} method instead
-     */
-    @Deprecated
-    public Expression path() {
-        return getExpression();
-    }
-
     /**
      * @return An expression representing null.
      */
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java 
b/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java
index bc34d0d63..994e65345 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ColumnSelect.java
@@ -470,16 +470,6 @@ public class ColumnSelect<T> extends FluentSelect<T> {
         return columns(property.max());
     }
 
-    /**
-     * <p>Select average value of property</p>
-     * @see ColumnSelect#columns(Property[])
-     * @deprecated since 4.2 use {@link #avg(NumericProperty)}
-     */
-    @Deprecated
-    public ColumnSelect<Object[]> avg(org.apache.cayenne.exp.Property<?> 
property) {
-        return columns(property.avg());
-    }
-
     /**
      * <p>Select average value of property</p>
      * @see ColumnSelect#columns(Property[])
@@ -488,16 +478,6 @@ public class ColumnSelect<T> extends FluentSelect<T> {
         return columns(property.avg());
     }
 
-    /**
-     * <p>Select sum of values</p>
-     * @see ColumnSelect#columns(Property[])
-     * @deprecated since 4.2 use {@link #sum(NumericProperty)}
-     */
-    @Deprecated
-    public <E extends Number> ColumnSelect<Object[]> 
sum(org.apache.cayenne.exp.Property<E> property) {
-        return columns(property.sum());
-    }
-
     /**
      * <p>Select sum of values</p>
      * @see ColumnSelect#columns(Property[])
diff --git 
a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java 
b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java
index 4a54d784c..aa2b22c45 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/query/ObjectSelect.java
@@ -618,16 +618,6 @@ public class ObjectSelect<T> extends FluentSelect<T> 
implements ParameterizedQue
         return column(property.max());
     }
 
-    /**
-     * <p>Select average value of property</p>
-     * @see ObjectSelect#column(Property)
-     * @deprecated since 4.2 use {@link #avg(NumericProperty)}
-     */
-    @Deprecated
-    public <E> ColumnSelect<E> avg(org.apache.cayenne.exp.Property<E> 
property) {
-        return column(property.avg());
-    }
-
     /**
      * <p>Select average value of property</p>
      * @see ObjectSelect#column(Property)
@@ -636,16 +626,6 @@ public class ObjectSelect<T> extends FluentSelect<T> 
implements ParameterizedQue
         return column(property.avg());
     }
 
-    /**
-     * <p>Select sum of values</p>
-     * @see ObjectSelect#column(Property)
-     * @deprecated since 4.2 use {@link #sum(NumericProperty)}
-     */
-    @Deprecated
-    public <E extends Number> ColumnSelect<E> 
sum(org.apache.cayenne.exp.Property<E> property) {
-        return column(property.sum());
-    }
-
     /**
      * <p>Select sum of values</p>
      * @see ObjectSelect#column(Property)
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/exp/PropertyTest.java 
b/cayenne-server/src/test/java/org/apache/cayenne/exp/PropertyTest.java
deleted file mode 100644
index 70c736107..000000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/exp/PropertyTest.java
+++ /dev/null
@@ -1,494 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.exp;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.cayenne.exp.parser.ASTAbs;
-import org.apache.cayenne.exp.parser.ASTAvg;
-import org.apache.cayenne.exp.parser.ASTConcat;
-import org.apache.cayenne.exp.parser.ASTCount;
-import org.apache.cayenne.exp.parser.ASTDistinct;
-import org.apache.cayenne.exp.parser.ASTLength;
-import org.apache.cayenne.exp.parser.ASTLocate;
-import org.apache.cayenne.exp.parser.ASTLower;
-import org.apache.cayenne.exp.parser.ASTMax;
-import org.apache.cayenne.exp.parser.ASTMin;
-import org.apache.cayenne.exp.parser.ASTMod;
-import org.apache.cayenne.exp.parser.ASTObjPath;
-import org.apache.cayenne.exp.parser.ASTScalar;
-import org.apache.cayenne.exp.parser.ASTSqrt;
-import org.apache.cayenne.exp.parser.ASTSubstring;
-import org.apache.cayenne.exp.parser.ASTSum;
-import org.apache.cayenne.exp.parser.ASTTrim;
-import org.apache.cayenne.exp.parser.ASTUpper;
-import org.apache.cayenne.exp.parser.PatternMatchNode;
-import org.apache.cayenne.exp.property.NumericProperty;
-import org.apache.cayenne.reflect.TstJavaBean;
-import org.junit.Test;
-
-@Deprecated
-public class PropertyTest {
-
-    @Test
-    public void testPath() {
-        Property<String> p = Property.create("x.y", String.class);
-        Expression pp = p.path();
-        assertEquals(ExpressionFactory.exp("x.y"), pp);
-    }
-
-    @Test
-    public void testIn() {
-        Property<String> p = Property.create("x.y", String.class);
-
-        Expression e1 = p.in("a");
-        assertEquals("x.y in (\"a\")", e1.toString());
-
-        Expression e2 = p.in("a", "b");
-        assertEquals("x.y in (\"a\", \"b\")", e2.toString());
-
-        Expression e3 = p.in(Arrays.asList("a", "b"));
-        assertEquals("x.y in (\"a\", \"b\")", e3.toString());
-    }
-
-    @Test
-    public void testGetFrom() {
-        TstJavaBean bean = new TstJavaBean();
-        bean.setIntField(7);
-        Property<Integer> INT_FIELD = Property.create("intField", 
Integer.class);
-        assertEquals(Integer.valueOf(7), INT_FIELD.getFrom(bean));
-    }
-
-    @Test
-    public void testGetFromNestedProperty() {
-        TstJavaBean bean = new TstJavaBean();
-        TstJavaBean nestedBean = new TstJavaBean();
-        nestedBean.setIntField(7);
-        bean.setObjectField(nestedBean);
-        Property<Integer> OBJECT_FIELD_INT_FIELD = 
Property.create("objectField.intField", Integer.class);
-        assertEquals(Integer.valueOf(7), OBJECT_FIELD_INT_FIELD.getFrom(bean));
-    }
-
-    @Test
-    public void testGetFromNestedNull() {
-        TstJavaBean bean = new TstJavaBean();
-        bean.setObjectField(null);
-        Property<Integer> OBJECT_FIELD_INT_FIELD = 
Property.create("objectField.intField", Integer.class);
-        assertNull(OBJECT_FIELD_INT_FIELD.getFrom(bean));
-    }
-
-    @Test
-    public void testGetFromAll() {
-        TstJavaBean bean = new TstJavaBean();
-        bean.setIntField(7);
-
-        TstJavaBean bean2 = new TstJavaBean();
-        bean2.setIntField(8);
-
-        List<TstJavaBean> beans = Arrays.asList(bean, bean2);
-
-        Property<Integer> INT_FIELD = Property.create("intField", 
Integer.class);
-        assertEquals(Arrays.asList(7, 8), INT_FIELD.getFromAll(beans));
-    }
-
-    @Test
-    public void testSetIn() {
-        TstJavaBean bean = new TstJavaBean();
-        Property<Integer> INT_FIELD = Property.create("intField", 
Integer.class);
-        INT_FIELD.setIn(bean, 7);
-        assertEquals(7, bean.getIntField());
-    }
-
-    @Test
-    public void testSetInNestedProperty() {
-        TstJavaBean bean = new TstJavaBean();
-        bean.setObjectField(new TstJavaBean());
-
-        Property<Integer> OBJECT_FIELD_INT_FIELD = 
Property.create("objectField.intField", Integer.class);
-
-        OBJECT_FIELD_INT_FIELD.setIn(bean, 7);
-        assertEquals(7, ((TstJavaBean) bean.getObjectField()).getIntField());
-    }
-
-    @Test
-    public void testSetInNestedNull() {
-        TstJavaBean bean = new TstJavaBean();
-        bean.setObjectField(null);
-        Property<Integer> OBJECT_FIELD_INT_FIELD = 
Property.create("objectField.intField", Integer.class);
-        OBJECT_FIELD_INT_FIELD.setIn(bean, 7);
-    }
-
-    @Test
-    public void testSetInAll() {
-        TstJavaBean bean = new TstJavaBean();
-        TstJavaBean bean2 = new TstJavaBean();
-        List<TstJavaBean> beans = Arrays.asList(bean, bean2);
-
-        Property<Integer> INT_FIELD = Property.create("intField", 
Integer.class);
-        INT_FIELD.setInAll(beans, 7);
-        assertEquals(7, bean.getIntField());
-        assertEquals(7, bean2.getIntField());
-    }
-
-    @Test
-    public void testEqualsWithName() {
-        Property<Integer> INT_FIELD = Property.create("intField", 
Integer.class);
-        Property<Integer> INT_FIELD2 = Property.create("intField", 
Integer.class);
-
-        assertTrue(INT_FIELD != INT_FIELD2);
-        assertTrue(INT_FIELD.equals(INT_FIELD2));
-    }
-
-    @Test
-    public void testHashCodeWithName() {
-        Property<Integer> INT_FIELD = Property.create("intField", 
Integer.class);
-        Property<Integer> INT_FIELD2 = Property.create("intField", 
Integer.class);
-        Property<Long> LONG_FIELD = Property.create("longField", Long.class);
-
-        assertTrue(INT_FIELD.hashCode() == INT_FIELD2.hashCode());
-        assertTrue(INT_FIELD.hashCode() != LONG_FIELD.hashCode());
-    }
-
-    @Test
-    public void testEqualsWithNameAndType() {
-        Property<Integer> INT_FIELD = Property.create("intField", 
Integer.class);
-        Property<Integer> INT_FIELD2 = Property.create("intField", 
Integer.class);
-
-        assertTrue(INT_FIELD != INT_FIELD2);
-        assertTrue(INT_FIELD.equals(INT_FIELD2));
-    }
-
-    @Test
-    public void testHashCodeWithNameAndType() {
-        Property<Integer> INT_FIELD = Property.create("intField", 
Integer.class);
-        Property<Integer> INT_FIELD2 = Property.create("intField", 
Integer.class);
-        Property<Long> LONG_FIELD = Property.create("longField", Long.class);
-
-        assertTrue(INT_FIELD.hashCode() == INT_FIELD2.hashCode());
-        assertTrue(INT_FIELD.hashCode() != LONG_FIELD.hashCode());
-    }
-
-    @Test
-    public void testEqualsWithExpAndType() {
-        Property<Integer> INT_FIELD = new Property<>(null, 
ExpressionFactory.exp("1"), Integer.class);
-        Property<Integer> INT_FIELD2 = new Property<>(null, 
ExpressionFactory.exp("1"), Integer.class);
-
-        assertTrue(INT_FIELD != INT_FIELD2);
-        assertTrue(INT_FIELD.equals(INT_FIELD2));
-    }
-
-    @Test
-    public void testHashCodeWithExpAndType() {
-        Property<Integer> INT_FIELD = new Property<>(null, 
ExpressionFactory.exp("1"), Integer.class);
-        Property<Integer> INT_FIELD2 = new Property<>(null, 
ExpressionFactory.exp("1"), Integer.class);
-        Property<Integer> INT_FIELD3 = new Property<>(null, 
ExpressionFactory.exp("2"), Integer.class);
-
-        assertEquals(INT_FIELD.hashCode(), INT_FIELD2.hashCode());
-        assertNotEquals(INT_FIELD.hashCode(), INT_FIELD3.hashCode());
-    }
-
-    @Test
-    public void testOuter() {
-        Property<String> inner = Property.create("xyz", String.class);
-        assertEquals("xyz+", inner.outer().getName());
-
-        Property<String> inner1 = Property.create("xyz.xxx", String.class);
-        assertEquals("xyz.xxx+", inner1.outer().getName());
-
-        Property<String> outer = Property.create("xyz+", String.class);
-        assertEquals("xyz+", outer.outer().getName());
-    }
-
-    @Test
-    public void testLike() {
-        Property<String> p = Property.create("prop", String.class);
-        Expression e = p.like("abc");
-        assertEquals("prop like \"abc\"", e.toString());
-    }
-
-    @Test
-    public void testLikeIgnoreCase() {
-        Property<String> p = Property.create("prop", String.class);
-        Expression e = p.likeIgnoreCase("abc");
-        assertEquals("prop likeIgnoreCase \"abc\"", e.toString());
-    }
-
-    @Test
-    public void testLike_NoEscape() {
-        Property<String> p = Property.create("prop", String.class);
-        Expression e = p.like("ab%c");
-        assertEquals("prop like \"ab%c\"", e.toString());
-        assertEquals(0, ((PatternMatchNode) e).getEscapeChar());
-    }
-
-    @Test
-    public void testContains() {
-        Property<String> p = Property.create("prop", String.class);
-        Expression e = p.contains("abc");
-        assertEquals("prop like \"%abc%\"", e.toString());
-        assertEquals(0, ((PatternMatchNode) e).getEscapeChar());
-    }
-
-    @Test
-    public void testStartsWith() {
-        Property<String> p = Property.create("prop", String.class);
-        Expression e = p.startsWith("abc");
-        assertEquals("prop like \"abc%\"", e.toString());
-        assertEquals(0, ((PatternMatchNode) e).getEscapeChar());
-    }
-
-    @Test
-    public void testEndsWith() {
-        Property<String> p = Property.create("prop", String.class);
-        Expression e = p.endsWith("abc");
-        assertEquals("prop like \"%abc\"", e.toString());
-        assertEquals(0, ((PatternMatchNode) e).getEscapeChar());
-    }
-
-    @Test
-    public void testContains_Escape1() {
-        Property<String> p = Property.create("prop", String.class);
-        Expression e = p.contains("a%bc");
-        assertEquals("prop like \"%a!%bc%\"", e.toString());
-        assertEquals('!', ((PatternMatchNode) e).getEscapeChar());
-    }
-
-    @Test
-    public void testContains_Escape2() {
-        Property<String> p = Property.create("prop", String.class);
-        Expression e = p.contains("a_!bc");
-        assertEquals("prop like \"%a#_!bc%\"", e.toString());
-        assertEquals('#', ((PatternMatchNode) e).getEscapeChar());
-    }
-
-    @Test
-    public void testExpressionConstructor() {
-        Property<Integer> p = Property.create("testPath", new 
ASTObjPath("test.path"), Integer.class);
-        assertEquals("testPath", p.getName());
-        Expression ex = p.getExpression();
-        assertEquals("test.path", ex.toString());
-    }
-
-    @Test
-    public void testCreationWithName() {
-        Property<String> p1 = new Property<>("p1", String.class);
-        assertEquals(String.class, p1.getType());
-        assertEquals("p1", p1.getName());
-        assertEquals(new ASTObjPath("p1"), p1.getExpression());
-
-        Property<String> p2 = Property.create("p1", String.class);
-        assertEquals(p1, p2);
-    }
-
-    @Test
-    public void testCreationWithExp() {
-        Expression exp = FunctionExpressionFactory.currentTime();
-
-        Property<String> p1 = new Property<>(null, exp, String.class);
-        assertEquals(String.class, p1.getType());
-        assertEquals(null, p1.getName());
-        assertEquals(exp, p1.getExpression());
-
-        Property<String> p2 = Property.create(exp, String.class);
-        assertEquals(p1, p2);
-    }
-
-    @Test
-    public void testCreationWithNameAndExp() {
-        Expression exp = FunctionExpressionFactory.currentTime();
-
-        Property<String> p1 = new Property<>("p1", exp, String.class);
-        assertEquals(String.class, p1.getType());
-        assertEquals("p1", p1.getName());
-        assertEquals(exp, p1.getExpression());
-
-        Property<String> p2 = Property.create("p1", exp, String.class);
-        assertEquals(p1, p2);
-    }
-
-    @Test
-    public void testAlias() {
-        Expression exp = FunctionExpressionFactory.currentTime();
-
-        Property<String> p1 = new Property<>("p1", exp, String.class);
-        assertEquals(String.class, p1.getType());
-        assertEquals("p1", p1.getName());
-        assertEquals(exp, p1.getExpression());
-
-        Property<String> p2 = p1.alias("p2");
-        assertEquals(String.class, p2.getType());
-        assertEquals("p2", p2.getName());
-        assertEquals(exp, p2.getExpression());
-    }
-
-    @Test
-    public void testCount() {
-        Property<String> p = Property.create("test", String.class);
-        NumericProperty<Long> newProp = p.count();
-        assertTrue(newProp.getExpression() instanceof ASTCount);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-    
-    @Test
-    public void testCountDistinct() {
-        Property<String> p = Property.create("test", String.class);
-        NumericProperty<Long> newProp = p.countDistinct();
-        assertTrue(newProp.getExpression() instanceof ASTCount);
-        assertTrue(newProp.getExpression().getOperand(0) instanceof 
ASTDistinct);
-        assertEquals(p.getExpression(), 
((ASTDistinct)newProp.getExpression().getOperand(0)).getOperand(0));
-    }
-
-    @Test
-    public void testMin() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.min();
-        assertTrue(newProp.getExpression() instanceof ASTMin);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testMax() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.max();
-        assertTrue(newProp.getExpression() instanceof ASTMax);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testSum() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.sum();
-        assertTrue(newProp.getExpression() instanceof ASTSum);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testAvg() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.avg();
-        assertTrue(newProp.getExpression() instanceof ASTAvg);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testAbs() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.abs();
-        assertTrue(newProp.getExpression() instanceof ASTAbs);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testMod() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.mod(3.0);
-        assertTrue(newProp.getExpression() instanceof ASTMod);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-        assertEquals(3.0, newProp.getExpression().getOperand(1));
-    }
-
-    @Test
-    public void testSqrt() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.sqrt();
-        assertTrue(newProp.getExpression() instanceof ASTSqrt);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testLength() {
-        Property<String> p = Property.create("test", String.class);
-        Property<Integer> newProp = p.length();
-        assertTrue(newProp.getExpression() instanceof ASTLength);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testLocateString() {
-        Property<String> p = Property.create("test", String.class);
-        Property<Integer> newProp = p.locate("test");
-        assertTrue(newProp.getExpression() instanceof ASTLocate);
-        assertEquals("test", newProp.getExpression().getOperand(0));
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(1));
-    }
-
-    @Test
-    public void testLocateProperty() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> p2 = Property.create("test2", String.class);
-        Property<Integer> newProp = p.locate(p2);
-        assertTrue(newProp.getExpression() instanceof ASTLocate);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(1));
-        assertEquals(p2.getExpression(), 
newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testSustring() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.substring(1, 2);
-        assertTrue(newProp.getExpression() instanceof ASTSubstring);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-        assertEquals(1, newProp.getExpression().getOperand(1));
-        assertEquals(2, newProp.getExpression().getOperand(2));
-    }
-
-    @Test
-    public void testTrim() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.trim();
-        assertTrue(newProp.getExpression() instanceof ASTTrim);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testLower() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.lower();
-        assertTrue(newProp.getExpression() instanceof ASTLower);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testUpper() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> newProp = p.upper();
-        assertTrue(newProp.getExpression() instanceof ASTUpper);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-    }
-
-    @Test
-    public void testConcat() {
-        Property<String> p = Property.create("test", String.class);
-        Property<String> p2 = Property.create("concat", String.class);
-        Expression exp = new ASTScalar(3);
-
-        Property<String> newProp = p.concat("string", exp, p2);
-        assertTrue(newProp.getExpression() instanceof ASTConcat);
-        assertEquals(p.getExpression(), newProp.getExpression().getOperand(0));
-        assertEquals("string", newProp.getExpression().getOperand(1));
-        assertEquals(3, newProp.getExpression().getOperand(2)); // getOperand 
unwrapping ASTScalar
-        assertEquals(p2.getExpression(), 
newProp.getExpression().getOperand(3));
-    }
-}
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Author.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Author.java
index 11554d9bf..77a0f08e7 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Author.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Author.java
@@ -5,7 +5,8 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 
 import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.exp.Property;
+import org.apache.cayenne.exp.property.PropertyFactory;
+import org.apache.cayenne.exp.property.StringProperty;
 
 /**
  * Class _Author was generated by Cayenne.
@@ -19,7 +20,7 @@ public abstract class _Author extends BaseDataObject {
 
     public static final String AUTHOR_ID_PK_COLUMN = "AUTHOR_ID";
 
-    public static final Property<String> NAME = Property.create("name", 
String.class);
+    public static final StringProperty<String> NAME = 
PropertyFactory.createString("name", String.class);
 
     protected String name;
 
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Song.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Song.java
index 15160cacc..b2d18d900 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Song.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/testdo/relationships_many_to_many_join/auto/_Song.java
@@ -6,7 +6,9 @@ import java.io.ObjectOutputStream;
 import java.util.Set;
 
 import org.apache.cayenne.BaseDataObject;
-import org.apache.cayenne.exp.Property;
+import org.apache.cayenne.exp.property.PropertyFactory;
+import org.apache.cayenne.exp.property.SetProperty;
+import org.apache.cayenne.exp.property.StringProperty;
 import org.apache.cayenne.testdo.relationships_many_to_many_join.Author;
 
 /**
@@ -21,8 +23,8 @@ public abstract class _Song extends BaseDataObject {
 
     public static final String SONG_ID_PK_COLUMN = "SONG_ID";
 
-    public static final Property<String> NAME = Property.create("name", 
String.class);
-    public static final Property<Set<Author>> AUTHORS = 
Property.create("authors", Set.class);
+    public static final StringProperty<String> NAME = 
PropertyFactory.createString("name", String.class);
+    public static final SetProperty<Author> AUTHORS = 
PropertyFactory.createSet("authors", Author.class);
 
     protected String name;
 

Reply via email to