You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/05/04 22:37:24 UTC
svn commit: r399853 - in /incubator/cayenne/jpa/trunk:
cayenne-jpa-annotations-example/
cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/
cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/
c...
Author: aadamchik
Date: Thu May 4 13:37:21 2006
New Revision: 399853
URL: http://svn.apache.org/viewcvs?rev=399853&view=rev
Log:
an example can setup a derby schema now...
still missing property accessors enhancers
Added:
incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/DerbySetupHelper.java
incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/resources/derby.properties
Modified:
incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/pom.xml
incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/Main.java
incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Department.java
incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Queries.java
incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/resources/META-INF/persistence.xml
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/JpaSQLTemplate.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/JpaSelectQuery.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/QueryHints.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedClass.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaPropertyDescriptor.java
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/pom.xml
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/pom.xml?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/pom.xml (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/pom.xml Thu May 4 13:37:21 2006
@@ -1,58 +1,50 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.cayenne</groupId>
- <artifactId>cayenne-jpa-annotations-example</artifactId>
- <packaging>jar</packaging>
- <version>3.0-incubating-SNAPSHOT</version>
- <name>An example application using JPA annotations.</name>
- <url>http://incubator.apache.org/cayenne</url>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-jpa_3.0_spec</artifactId>
- <version>1.0-SNAPSHOT</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.cayenne</groupId>
- <artifactId>cayenne-jpa</artifactId>
- <version>3.0-incubating-SNAPSHOT</version>
- <scope>runtime</scope>
- </dependency>
-
- <dependency>
- <groupId>postgresql</groupId>
- <artifactId>postgresql</artifactId>
- <version>8.0-312.jdbc3</version>
- <scope>runtime</scope>
- </dependency>
-
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib-nodep</artifactId>
- <version>2.1_3</version>
- <scope>runtime</scope>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.5</source>
- <target>1.5</target>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
+<?xml version="1.0"?><project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.cayenne</groupId>
+ <artifactId>cayenne-jpa-annotations-example</artifactId>
+ <name>An example application using JPA annotations.</name>
+ <version>3.0-incubating-SNAPSHOT</version>
+ <url>http://incubator.apache.org/cayenne</url>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.geronimo.specs</groupId>
+ <artifactId>geronimo-jpa_3.0_spec</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.cayenne</groupId>
+ <artifactId>cayenne-jpa</artifactId>
+ <version>3.0-incubating-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib-nodep</artifactId>
+ <version>2.1_3</version>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.2.1</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Added: incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/DerbySetupHelper.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/DerbySetupHelper.java?rev=399853&view=auto
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/DerbySetupHelper.java (added)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/DerbySetupHelper.java Thu May 4 13:37:21 2006
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2006 The Apache Software Foundation
+ *
+ * Licensed 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
+ *
+ * http://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.jpa.example;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import javax.persistence.PersistenceException;
+
+import org.apache.cayenne.jpa.example.entity.Department;
+import org.objectstyle.cayenne.access.DataContext;
+import org.objectstyle.cayenne.access.DataNode;
+import org.objectstyle.cayenne.access.DbGenerator;
+import org.objectstyle.cayenne.map.DataMap;
+
+/**
+ * A helper class that creates a new test Derby database. Uses Cayenne API to bootstrap
+ * the DB, but the schema check query is actaully mapped with annotations.
+ *
+ * @author Andrus Adamchik
+ */
+class DerbySetupHelper {
+
+ static final String DERBY_SYSTEM_PROPERTY = "derby.system.home";
+
+ private DataContext context;
+
+ void setupDatabase() {
+ if (context == null) {
+ context = DataContext.createDataContext();
+ }
+ if (checkDBSetupNeeded()) {
+ setupDemoSchema();
+ }
+ }
+
+ void prepareDerby() throws PersistenceException {
+ InputStream in = Thread
+ .currentThread()
+ .getContextClassLoader()
+ .getResourceAsStream("derby.properties");
+
+ if (in != null) {
+ Properties props = new Properties();
+
+ try {
+ props.load(in);
+ }
+ catch (IOException e) {
+ throw new PersistenceException("Error reading properties", e);
+ }
+
+ System.getProperties().putAll(props);
+ }
+
+ // setup Derby home to be Java TMP directory if not set explicitly
+
+ if (System.getProperty(DERBY_SYSTEM_PROPERTY) == null) {
+ System.setProperty(DERBY_SYSTEM_PROPERTY, System
+ .getProperty("java.io.tmpdir"));
+ }
+
+ }
+
+ /**
+ * Runs a test query to see if a schema is initialized.
+ */
+ private boolean checkDBSetupNeeded() {
+ try {
+ context.performNonSelectingQuery("SchemaCheck");
+ return false;
+ }
+ catch (Throwable th) {
+ return true;
+ }
+ }
+
+ private void setupDemoSchema() {
+ DataMap map = context
+ .getEntityResolver()
+ .lookupObjEntity(Department.class)
+ .getDataMap();
+ DataNode node = context.getParentDataDomain().lookupDataNode(map);
+ DbGenerator generator = new DbGenerator(node.getAdapter(), map);
+ try {
+ generator.runGenerator(node.getDataSource());
+ }
+ catch (Exception e) {
+ throw new PersistenceException("Error generating DB schema", e);
+ }
+ }
+}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/Main.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/Main.java?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/Main.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/Main.java Thu May 4 13:37:21 2006
@@ -48,9 +48,20 @@
}
Main() {
+
+ DerbySetupHelper schemaHelper = new DerbySetupHelper();
+
+ // setup Derby properties first
+ schemaHelper.prepareDerby();
+
+ // create JPA EntityManager
this.entityManager = Persistence
.createEntityManagerFactory("HRPersistenceUnit")
.createEntityManager(PersistenceContextType.EXTENDED);
+
+ // now that the mapping is loaded, create test DB
+ schemaHelper.setupDatabase();
+
this.logger = LogFactory.getLog("3t-client-demo");
}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Department.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Department.java?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Department.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Department.java Thu May 4 13:37:21 2006
@@ -38,10 +38,10 @@
protected String name;
protected String description;
- @OneToMany
+ @OneToMany(mappedBy = "department")
protected List<Person> employees;
- @OneToMany
+ @OneToMany(mappedBy = "department")
protected List<Project> projects;
public String getDescription() {
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Queries.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Queries.java?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Queries.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Queries.java Thu May 4 13:37:21 2006
@@ -22,6 +22,10 @@
import org.apache.cayenne.jpa.bridge.QueryHints;
@NamedQueries(value = {
+ @NamedQuery(name = "SchemaCheck", query = "select count(1) from department", hints = {
+ @QueryHint(name = QueryHints.QUERY_TYPE_HINT, value = QueryHints.SQL_TEMPLATE_QUERY),
+ @QueryHint(name = QueryHints.DATA_ROWS_HINT, value = "true")
+ }),
@NamedQuery(name = "CreateData", query = "insert into department (department_id, name, description) "
+ "values (1, 'IT', 'Information Technology Department')", hints = {
@QueryHint(name = QueryHints.QUERY_TYPE_HINT, value = QueryHints.SQL_TEMPLATE_QUERY)
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/resources/META-INF/persistence.xml
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/resources/META-INF/persistence.xml?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/resources/META-INF/persistence.xml (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/resources/META-INF/persistence.xml Thu May 4 13:37:21 2006
@@ -14,10 +14,15 @@
<class>org.apache.cayenne.jpa.example.entity.Queries</class>
<properties>
- <property name="CayenneDataSource.ds1.jdbc.driver" value="org.postgresql.Driver"/>
- <property name="CayenneDataSource.ds1.jdbc.url" value="jdbc:postgresql://localhost:5432/hr"/>
+ <property name="CayenneDataSource.ds1.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
+ <property name="CayenneDataSource.ds1.jdbc.url" value="jdbc:derby:cayenne/cayenne-jpa-annotations-db;create=true"/>
+
+ <!-- uncomment this to use login id and password for DB connection. -->
+ <!--
<property name="CayenneDataSource.ds1.jdbc.username" value="andrus"/>
<property name="CayenneDataSource.ds1.jdbc.password" value="andrus"/>
+ -->
+
<property name="CayenneDataSource.ds1.jdbc.minConnections" value="1"/>
<property name="CayenneDataSource.ds1.jdbc.maxConnections" value="2"/>
</properties>
Added: incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/resources/derby.properties
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/resources/derby.properties?rev=399853&view=auto
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/resources/derby.properties (added)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/resources/derby.properties Thu May 4 13:37:21 2006
@@ -0,0 +1 @@
+#derby.system.home = /fullpath/to/desired/derby/location
\ No newline at end of file
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java Thu May 4 13:37:21 2006
@@ -17,7 +17,6 @@
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
-import java.sql.Types;
import javax.persistence.TemporalType;
@@ -36,14 +35,12 @@
import org.apache.cayenne.jpa.map.JpaNamedQuery;
import org.apache.cayenne.jpa.map.JpaOneToMany;
import org.apache.cayenne.jpa.map.JpaOneToOne;
-import org.apache.cayenne.jpa.map.JpaPropertyDescriptor;
import org.apache.cayenne.jpa.map.JpaQueryHint;
import org.apache.cayenne.jpa.map.JpaRelationship;
import org.apache.cayenne.jpa.map.JpaTable;
import org.apache.cayenne.util.BaseTreeVisitor;
import org.apache.cayenne.util.HierarchicalTreeVisitor;
import org.apache.cayenne.util.TraversalUtil;
-import org.objectstyle.cayenne.dba.TypesMapping;
import org.objectstyle.cayenne.map.DataMap;
import org.objectstyle.cayenne.map.DbAttribute;
import org.objectstyle.cayenne.map.DbEntity;
@@ -182,31 +179,14 @@
JpaColumn jpaColumn = (JpaColumn) path.getObject();
JpaBasic jpaBasic = (JpaBasic) path.getObjectParent();
- ObjAttribute cayenneObjAttribute = (ObjAttribute) targetPath.getObject();
-
DbAttribute dbAttribute = new DbAttribute(jpaColumn.getName());
- // per JPA spec only date types are mapped explicitly...
- int type;
TemporalType ttype = jpaBasic.getParent().getTemporal();
- if (ttype != null) {
-
- if (TemporalType.TIMESTAMP == ttype) {
- type = Types.TIMESTAMP;
- }
- else if (TemporalType.DATE == ttype) {
- type = Types.DATE;
- }
- else {
- type = Types.TIME;
- }
- }
- else {
- type = TypesMapping.getSqlTypeByJava(cayenneObjAttribute.getJavaClass());
- }
- dbAttribute.setType(type);
+ dbAttribute.setType(jpaBasic.getParent().getPropertyDescriptor().getJdbcType(
+ ttype));
dbAttribute.setMandatory(!jpaColumn.isNullable());
+ dbAttribute.setMaxLength(jpaColumn.getLength());
// TODO, andrus, 4/28/2006 - note that Cayenne DbAttribute's precision is
// really scale (and precision is not defined at all). Fix this in
@@ -242,25 +222,10 @@
JpaId jpaId = (JpaId) path.firstInstanceOf(JpaId.class);
- // per JPA spec only date types are mapped explicitly...
- int type;
- if (jpaId.getTemporal() != null) {
- if (TemporalType.TIMESTAMP == jpaId.getTemporal()) {
- type = Types.TIMESTAMP;
- }
- else if (TemporalType.DATE == jpaId.getTemporal()) {
- type = Types.DATE;
- }
- else {
- type = Types.TIME;
- }
- }
- else {
- JpaPropertyDescriptor property = jpaId.getPropertyDescriptor();
- type = TypesMapping.getSqlTypeByJava(property.getType());
- }
- dbAttribute.setType(type);
+ dbAttribute.setType(jpaId.getPropertyDescriptor().getJdbcType(
+ jpaId.getTemporal()));
+ dbAttribute.setMaxLength(jpaColumn.getLength());
dbAttribute.setMandatory(true);
dbAttribute.setPrimaryKey(true);
@@ -308,27 +273,10 @@
// TODO: andrus, 5/2/2006 - infer this from Jpa relationship
src.setMandatory(false);
+
src.setMaxLength(jpaTargetId.getColumn().getLength());
-
- // per JPA spec only date types are mapped explicitly...
- int type;
- if (jpaTargetId.getTemporal() != null) {
- if (TemporalType.TIMESTAMP == jpaTargetId.getTemporal()) {
- type = Types.TIMESTAMP;
- }
- else if (TemporalType.DATE == jpaTargetId.getTemporal()) {
- type = Types.DATE;
- }
- else {
- type = Types.TIME;
- }
- }
- else {
- JpaPropertyDescriptor property = jpaTargetId.getPropertyDescriptor();
- type = TypesMapping.getSqlTypeByJava(property.getType());
- }
-
- src.setType(type);
+ src.setType(jpaTargetId.getPropertyDescriptor().getJdbcType(
+ jpaTargetId.getTemporal()));
DbEntity srcEntity = dataMap.getDbEntity(jpaJoin.getTable());
srcEntity.addAttribute(src);
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/JpaSQLTemplate.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/JpaSQLTemplate.java?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/JpaSQLTemplate.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/JpaSQLTemplate.java Thu May 4 13:37:21 2006
@@ -17,6 +17,7 @@
import java.util.Collections;
+import org.apache.cayenne.jpa.map.JpaQueryHint;
import org.objectstyle.cayenne.CayenneRuntimeException;
import org.objectstyle.cayenne.map.EntityResolver;
import org.objectstyle.cayenne.query.Query;
@@ -46,6 +47,12 @@
}
else {
throw new CayenneRuntimeException("Unknown query root. Name: " + getName());
+ }
+
+ // metadata hints
+ JpaQueryHint dataRowsHint = jpaQuery.getHint(QueryHints.DATA_ROWS_HINT);
+ if (dataRowsHint != null) {
+ query.setFetchingDataRows("true".equalsIgnoreCase(dataRowsHint.getValue()));
}
return query.queryWithParameters(parameters != null
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/JpaSelectQuery.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/JpaSelectQuery.java?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/JpaSelectQuery.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/JpaSelectQuery.java Thu May 4 13:37:21 2006
@@ -47,6 +47,15 @@
+ getName());
}
+ // metadata hints
+
+ JpaQueryHint dataRowsHint = jpaQuery.getHint(QueryHints.DATA_ROWS_HINT);
+ if (dataRowsHint != null) {
+ query.setFetchingDataRows("true".equalsIgnoreCase(dataRowsHint.getValue()));
+ }
+
+ // other hints
+
JpaQueryHint qualifierHint = jpaQuery.getHint(QueryHints.QUALIFIER_HINT);
if (qualifierHint != null) {
query.setQualifier(Expression.fromString(qualifierHint.getValue()));
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/QueryHints.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/QueryHints.java?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/QueryHints.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/QueryHints.java Thu May 4 13:37:21 2006
@@ -27,4 +27,5 @@
public static final String SQL_TEMPLATE_QUERY = "org.apache.cayenne.jpa.bridge.JpaSQLTemplate";
public static final String QUALIFIER_HINT = "cayenne.query.qualifier";
+ public static final String DATA_ROWS_HINT = "cayenne.query.fetchesDataRows";
}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java Thu May 4 13:37:21 2006
@@ -29,6 +29,7 @@
import org.apache.cayenne.jpa.map.JpaEntityMap;
import org.apache.cayenne.jpa.map.JpaId;
import org.apache.cayenne.jpa.map.JpaJoinColumn;
+import org.apache.cayenne.jpa.map.JpaManagedAttribute;
import org.apache.cayenne.jpa.map.JpaManyToMany;
import org.apache.cayenne.jpa.map.JpaManyToOne;
import org.apache.cayenne.jpa.map.JpaMappedSuperclass;
@@ -152,6 +153,9 @@
if (property.isDefaultNonRelationalType()) {
JpaAttribute attribute = new JpaAttribute();
+
+ attribute.setPropertyDescriptor(property);
+
attribute.setBasic(new JpaBasic());
attribute.setName(property.getName());
entity.getAttributes().add(attribute);
@@ -204,15 +208,26 @@
public boolean onStartNode(ProjectPath path) {
JpaColumn column = (JpaColumn) path.getObject();
+ JpaManagedAttribute parent = (JpaManagedAttribute) path
+ .firstInstanceOf(JpaManagedAttribute.class);
+
if (column.getName() == null) {
- JpaAttribute attribute = (JpaAttribute) path
- .firstInstanceOf(JpaAttribute.class);
- column.setName(attribute.getName());
+ column.setName(parent.getName());
}
if (column.getTable() == null) {
JpaEntity entity = (JpaEntity) path.firstInstanceOf(JpaEntity.class);
column.setTable(entity.getTable().getName());
+ }
+
+ if (parent.getPropertyDescriptor().isStringType()) {
+ if (column.getLength() < 0) {
+ column.setLength(255);
+ }
+ }
+ else {
+ // length for non-string types should be ignored...
+ column.setLength(-1);
}
return true;
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedClass.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedClass.java?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedClass.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManagedClass.java Thu May 4 13:37:21 2006
@@ -15,7 +15,6 @@
*/
package org.apache.cayenne.jpa.map;
-
public abstract class JpaManagedClass {
protected JpaClassDescriptor classDescriptor;
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaPropertyDescriptor.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaPropertyDescriptor.java?rev=399853&r1=399852&r2=399853&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaPropertyDescriptor.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaPropertyDescriptor.java Thu May 4 13:37:21 2006
@@ -21,10 +21,14 @@
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+import java.sql.Types;
import java.util.Collection;
import java.util.regex.Matcher;
+import javax.persistence.TemporalType;
+
import org.apache.cayenne.jpa.JpaProviderException;
+import org.objectstyle.cayenne.dba.TypesMapping;
/**
* A descriptor of a class property that may or may not be persistent.
@@ -100,6 +104,31 @@
}
return Void.TYPE.equals(targetEntityType) ? null : targetEntityType;
+ }
+
+ public int getJdbcType(TemporalType temporalHint) {
+ // per JPA spec only date types are mapped explicitly... everything else is guess
+ // per JDBC default...
+
+ if (temporalHint != null) {
+
+ if (TemporalType.TIMESTAMP == temporalHint) {
+ return Types.TIMESTAMP;
+ }
+ else if (TemporalType.DATE == temporalHint) {
+ return Types.DATE;
+ }
+ else {
+ return Types.TIME;
+ }
+ }
+ else {
+ return TypesMapping.getSqlTypeByJava(type);
+ }
+ }
+
+ public boolean isStringType() {
+ return String.class.isAssignableFrom(type);
}
/**