Topia-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
October 2011
- 5 participants
- 30 discussions
r2357 - in trunk/topia-persistence/src/main: java/org/nuiton/topia/generator resources/META-INF
by tchemit@users.nuiton.org 16 Oct '11
by tchemit@users.nuiton.org 16 Oct '11
16 Oct '11
Author: tchemit
Date: 2011-10-16 23:46:22 +0200 (Sun, 16 Oct 2011)
New Revision: 2357
Url: http://nuiton.org/repositories/revision/topia/2357
Log:
Anomalie #1769: Hibernate mappings fails to load in offline mode (use DTD from hibernate)
Removed:
trunk/topia-persistence/src/main/resources/META-INF/dtd/
Modified:
trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java 2011-10-16 20:08:41 UTC (rev 2356)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java 2011-10-16 21:46:22 UTC (rev 2357)
@@ -121,7 +121,7 @@
return;
}
/*{<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "classpath://META-INF/dtd/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "classpath://org/hibernate/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field" auto-import="true" package="<%=input.getPackageName()%>">
}*/
boolean haveSuper = input.getSuperclasses().size() > 0;
1
0
r2356 - trunk/topia-persistence/src/main/java/org/nuiton/topia/framework
by echatellier@users.nuiton.org 16 Oct '11
by echatellier@users.nuiton.org 16 Oct '11
16 Oct '11
Author: echatellier
Date: 2011-10-16 22:08:41 +0200 (Sun, 16 Oct 2011)
New Revision: 2356
Url: http://nuiton.org/repositories/revision/topia/2356
Log:
Fix h2 restore clustering bug
Modified:
trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2011-10-14 14:08:09 UTC (rev 2355)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2011-10-16 20:08:41 UTC (rev 2356)
@@ -1355,8 +1355,14 @@
in.close();
}
+ // FIXME echatellier 20111016 : fix runscript failure in h2
+ // due to change in clustering between version 1.2.142 and 1.2.143
+ // "Cluster: auto-commit was disabled after opening a connection."
+ getHibernate().connection().setAutoCommit(true);
+
SQLQuery query = getHibernate().createSQLQuery(
"RUNSCRIPT FROM '" + file.getAbsolutePath() + "'" + options);
+
query.executeUpdate();
// send event AFTER restore
1
0
r2355 - in trunk/topia-persistence/src/main/java/org/nuiton/topia: . framework
by tchemit@users.nuiton.org 14 Oct '11
by tchemit@users.nuiton.org 14 Oct '11
14 Oct '11
Author: tchemit
Date: 2011-10-14 16:08:09 +0200 (Fri, 14 Oct 2011)
New Revision: 2355
Url: http://nuiton.org/repositories/revision/topia/2355
Log:
Evolution #1776: add a executeSQL in TopiaContext + little clean in TopiaContextImpl
Modified:
trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java
trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java 2011-10-14 14:02:01 UTC (rev 2354)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/TopiaContext.java 2011-10-14 14:08:09 UTC (rev 2355)
@@ -363,4 +363,12 @@
*/
boolean isClosed();
+ /**
+ * Execute a given sql code inside this transaction.
+ *
+ * @param sqlScript the sql script to execute
+ * @throws TopiaException if any problem occurs while executing the sql script.
+ */
+ void executeSQL(String sqlScript) throws TopiaException;
+
} //TopiaContext
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2011-10-14 14:02:01 UTC (rev 2354)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2011-10-14 14:08:09 UTC (rev 2355)
@@ -53,6 +53,7 @@
import org.hibernate.event.PreInsertEventListener;
import org.hibernate.event.PreLoadEventListener;
import org.hibernate.event.PreUpdateEventListener;
+import org.hibernate.jdbc.Work;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.hbm2ddl.SchemaUpdate;
import org.nuiton.topia.TopiaContext;
@@ -80,6 +81,9 @@
import java.io.Reader;
import java.io.Writer;
import java.lang.reflect.Field;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -715,7 +719,7 @@
_("topia.persistence.error.null.param",
"entityClass", "getDAO"));
}
- if (this == getRootContext()) {
+ if (equals(getRootContext())) {
throw new TopiaException(
_("topia.persistence.error.rootContext.access"));
}
@@ -742,7 +746,7 @@
try {
Class<TopiaDAO<E>> daoClass =
(Class<TopiaDAO<E>>) Class.forName(daoClassname);
- TopiaDAO<E> spe = daoClass.newInstance();
+ TopiaDAO<E> spe = daoClass.getConstructor().newInstance();
result = spe;
} catch (Exception eee) {
log.warn("specialized DAO " + daoClassname +
@@ -814,7 +818,7 @@
@Override
public void commitTransaction() throws TopiaException {
- if (getRootContext() == this) {
+ if (equals(getRootContext())) {
throw new TopiaException(_(
"topia.persistence.error.unsupported.operation.on.root.context",
"commit"));
@@ -945,6 +949,16 @@
return closed;
}
+ @Override
+ public void executeSQL(String sqlScript) throws TopiaException {
+ SQLWork sqlWork = new SQLWork(sqlScript);
+ try {
+ getHibernate().doWork(sqlWork);
+ } catch (HibernateException e) {
+ throw new TopiaException("Could not execute sql code", e);
+ }
+ }
+
protected void checkClosed(String message) throws TopiaException {
if (closed) {
throw new TopiaException(message);
@@ -968,7 +982,7 @@
}
@Override
- public List findByQuery(TopiaQuery query) throws TopiaException {
+ public List<?> findByQuery(TopiaQuery query) throws TopiaException {
return query.execute(this);
}
@@ -979,7 +993,7 @@
}
@Override
- public List find(String hql, Object... args) throws TopiaException {
+ public List<?> find(String hql, Object... args) throws TopiaException {
checkClosed(_(
"topia.persistence.error.unsupported.operation.on.closed.context",
"find"));
@@ -1330,7 +1344,7 @@
// read header to see if is compressed file
int b = in.read();
// redundant cast : int magic = ((int) in.read() << 8) | b;
- int magic = (in.read() << 8) | b;
+ int magic = in.read() << 8 | b;
in.reset();
if (magic == GZIPInputStream.GZIP_MAGIC) {
@@ -1523,7 +1537,7 @@
// si entityAndcondition est vide alors il faut le remplir
// avec toutes les entités du mapping (class, null)
if (entityAndCondition.length == 0) {
- Map classMetadata = getHibernateFactory().getAllClassMetadata();
+ Map<?,?> classMetadata = getHibernateFactory().getAllClassMetadata();
entityAndCondition = new Object[classMetadata.size() * 2];
int i = 0;
for (Object className : classMetadata.keySet()) {
@@ -1587,5 +1601,22 @@
}
}
+ public static class SQLWork implements Work {
+ private final String script;
+
+ public SQLWork(String script) {
+ this.script = script;
+ }
+
+ @Override
+ public void execute(Connection connection) throws SQLException {
+ PreparedStatement sta = connection.prepareStatement(script);
+ try {
+ sta.execute();
+ } finally {
+ sta.close();
+ }
+ }
+ }
} //TopiaContextImpl
1
0
r2354 - trunk/topia-persistence/src/main/java/org/nuiton/topia/generator
by tchemit@users.nuiton.org 14 Oct '11
by tchemit@users.nuiton.org 14 Oct '11
14 Oct '11
Author: tchemit
Date: 2011-10-14 16:02:01 +0200 (Fri, 14 Oct 2011)
New Revision: 2354
Url: http://nuiton.org/repositories/revision/topia/2354
Log:
remove unused import
Modified:
trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java 2011-10-13 15:47:37 UTC (rev 2353)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java 2011-10-14 14:02:01 UTC (rev 2354)
@@ -48,7 +48,6 @@
import org.nuiton.topia.persistence.TopiaEntityContextable;
import org.nuiton.topia.persistence.util.TopiaEntityHelper;
-import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
1
0
r2353 - trunk/topia-persistence/src/main/java/org/nuiton/topia/generator
by tchemit@users.nuiton.org 13 Oct '11
by tchemit@users.nuiton.org 13 Oct '11
13 Oct '11
Author: tchemit
Date: 2011-10-13 17:47:37 +0200 (Thu, 13 Oct 2011)
New Revision: 2353
Url: http://nuiton.org/repositories/revision/topia/2353
Log:
Evolution #1773: Remove code in generators that prevent generation of classes alerady in classpath
Modified:
trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java
trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2011-10-13 15:12:26 UTC (rev 2352)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2011-10-13 15:47:37 UTC (rev 2353)
@@ -117,7 +117,7 @@
getOutputProperties().getProperty(PROP_DEFAULT_PACKAGE);
if (generateStandaloneEnum) {
- entityEnumPackage = packageName+"."+entityEnumName;
+ entityEnumPackage = packageName + "." + entityEnumName;
} else {
String daoHelperClazzName = modelName + "DAOHelper";
entityEnumPackage = packageName + "." + daoHelperClazzName + "." + entityEnumName;
@@ -221,43 +221,69 @@
@Override
public void transformFromClass(ObjectModelClass clazz) {
if (!TopiaGeneratorUtil.isEntity(clazz)) {
+ // not an entity
return;
}
String clazzName = clazz.getName();
String clazzFQN = clazz.getQualifiedName();
- // generate DAO
- generateDAOClass(clazz, clazzName, clazzFQN);
+ if (isGenerateDAO(clazz)) {
+ // generate DAO
+ generateDAOClass(clazz, clazzName, clazzFQN);
+
+ }
if (isGenerateImpl(clazz)) {
// generate DAOImpl
generateDAOImpl(clazz, clazzName, clazzFQN);
}
- // generate DAOAbstract
- generateDAOAbstract(clazz, clazzName, clazzFQN);
+ if (isGenerateDAOAbstract(clazz)) {
+
+ // generate DAOAbstract
+ generateDAOAbstract(clazz, clazzName, clazzFQN);
+ }
}
- protected boolean isGenerateImpl(ObjectModelClass input) {
+ protected boolean isGenerateDAO(ObjectModelClass input) {
- String fqn = input.getQualifiedName() + "DAOImpl";
+ String fqn = input.getQualifiedName() + "DAO";
- URL fileLocation = getFileInClassPath(fqn);
+ if (isInClassPath(fqn)) {
- if (fileLocation != null) {
+ // already in class-path
+ return false;
+ }
- // there is already a existing file in class-path, skip
+ // can safely generate the dao impl
+ return true;
+ }
- if (isVerbose()) {
+ protected boolean isGenerateDAOAbstract(ObjectModelClass input) {
- log.info("Will not generate [" + fqn + "], already found in class-path at location : " + fileLocation);
- } else {
- log.info("Will not generate [" + fqn + "], already found in class-path.");
- }
+ String fqn = input.getQualifiedName() + "DAOAbstract";
+
+ if (isInClassPath(fqn)) {
+
+ // already in class-path
return false;
}
+ // can safely generate the dao impl
+ return true;
+ }
+
+ protected boolean isGenerateImpl(ObjectModelClass input) {
+
+ String fqn = input.getQualifiedName() + "DAOImpl";
+
+ if (isInClassPath(fqn)) {
+
+ // already in class-path
+ return false;
+ }
+
Collection<ObjectModelOperation> moreOperations =
extraOperations.get(input.getQualifiedName());
@@ -306,7 +332,7 @@
protected void generateDAOAbstract(ObjectModelClass clazz,
String clazzName,
String clazzFQN) {
- ObjectModelClass daoAbstractClass = createAbstractClass(
+ ObjectModelClass daoAbstractClass = createAbstractClass(
clazzName + "DAOAbstract<E extends " + clazzName + '>',
clazz.getPackageName());
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java 2011-10-13 15:12:26 UTC (rev 2352)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityTransformer.java 2011-10-13 15:47:37 UTC (rev 2353)
@@ -98,6 +98,10 @@
private boolean associationClass;
+ protected boolean generateInterface;
+ protected boolean generateAbstract;
+ protected boolean generateImpl;
+
protected void clean() {
outputInterface = null;
outputAbstract = null;
@@ -132,12 +136,22 @@
}
setConstantPrefix(prefix);
- // Create Entity Interface and its header
- createEntityInterface(input);
+ generateInterface = isGenerateInterface(input);
+ generateAbstract = isGenerateAbstract(input);
+ generateImpl = isGenerateImpl(input);
- // Create Entity Abstract class and its header
- createEntityAbstractClass(input);
+ if (generateInterface) {
+
+ // Create Entity Interface and its header
+ createEntityInterface(input);
+ }
+ if (generateAbstract) {
+
+ // Create Entity Abstract class and its header
+ createEntityAbstractClass(input);
+ }
+
// Generate i18n block
String i18nPrefix = JavaGeneratorUtil.getI18nPrefixTagValue(input, model);
if (!StringUtils.isEmpty(i18nPrefix)) {
@@ -180,7 +194,6 @@
generateSerialVersionUID(input, outputAbstract);
// Generate Entity Implementation class
- boolean generateImpl = isGenerateImpl(input, input.getOperations());
if (generateImpl) {
generateImpl(input);
generateSerialVersionUID(input, outputImpl);
@@ -340,23 +353,27 @@
}
}
- protected boolean isGenerateImpl(ObjectModelClass input,
- Collection<ObjectModelOperation> operations) {
+ protected boolean isGenerateInterface(ObjectModelClass input) {
- String fqn = input.getQualifiedName() + "Impl";
+ boolean alreadyInClassPath = !isInClassPath(input);
+ return alreadyInClassPath;
+ }
- URL fileLocation = getFileInClassPath(fqn);
+ protected boolean isGenerateAbstract(ObjectModelClass input) {
- if (fileLocation != null) {
+ String fqn = input.getQualifiedName() + " Abstract";
+ boolean alreadyInClassPath = !isInClassPath(fqn);
+ return alreadyInClassPath;
+ }
- // there is already a existing file in class-path, skip
+ protected boolean isGenerateImpl(ObjectModelClass input) {
- if (isVerbose()) {
+ Collection<ObjectModelOperation> operations = input.getOperations();
+ String fqn = input.getQualifiedName() + "Impl";
- log.info("Will not generate [" + fqn + "], already found in class-path at location : " + fileLocation);
- } else {
- log.info("Will not generate [" + fqn + "], already found in class-path.");
- }
+ boolean alreadyInClassPath = isInClassPath(fqn);
+ if (alreadyInClassPath) {
+
return false;
}
@@ -1443,42 +1460,6 @@
setOperationBody(operation, body.length() == 0 ? " " : body.toString());
}
- /**
- *
- * @deprecated since 2.5, use the
- * {@link ObjectModelTransformerToJava#generateI18nBlock(ObjectModelClassifier, ObjectModelClassifier, String)}
- */
- @Deprecated
- protected void generateI18nBlock(ObjectModelClass input, String i18nPrefix) {
- generateI18nBlock(input,outputAbstract,i18nPrefix);
-// ObjectModelOperation block =
-// addBlock(outputAbstract, ObjectModelModifier.STATIC);
-//
-// StringBuilder buffer = new StringBuilder(300);
-// addI18n(buffer, i18nPrefix, Introspector.decapitalize(input.getName()));
-// for (ObjectModelAttribute attr : input.getAttributes()) {
-// //TC-20100225 only treate navigable relations
-// if (attr.isNavigable()) {
-// addI18n(buffer, i18nPrefix, Introspector.decapitalize(attr.getName()));
-// }
-// }
-// setOperationBody(block, buffer.toString());
- }
-
- /**
- *
- * @deprecated since 2.5, use the {@link ObjectModelTransformerToJava#addI18n(StringBuilder, String, String)}
- */
- @Deprecated
- protected void addI18n(StringBuilder buffer, String i18nPrefix,
- String suffix) {
- super.addI18n(buffer,i18nPrefix,suffix);
-// buffer.append("\n org.nuiton.i18n.I18n.n_(\"");
-// buffer.append(i18nPrefix);
-// buffer.append(suffix);
-// buffer.append("\");");
- }
-
// -------------------------------------------------------------------------
// Helpers
// -------------------------------------------------------------------------
1
0
Author: tchemit
Date: 2011-10-13 17:12:26 +0200 (Thu, 13 Oct 2011)
New Revision: 2352
Url: http://nuiton.org/repositories/revision/topia/2352
Log:
T?\195?\162che #1775: Updates to eugene 2.5
Modified:
trunk/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2011-10-10 08:51:23 UTC (rev 2351)
+++ trunk/pom.xml 2011-10-13 15:12:26 UTC (rev 2352)
@@ -67,7 +67,7 @@
<projectId>topia</projectId>
<!-- libs version -->
- <eugeneVersion>2.4</eugeneVersion>
+ <eugeneVersion>2.5-SNAPSHOT</eugeneVersion>
<nuitonUtilsVersion>2.3</nuitonUtilsVersion>
<processorPluginVersion>1.2.1</processorPluginVersion>
<nuitonI18nVersion>2.4.1</nuitonI18nVersion>
1
0
r2351 - in trunk/topia-persistence/src/main: java/org/nuiton/topia/generator resources/META-INF resources/META-INF/dtd
by tchemit@users.nuiton.org 10 Oct '11
by tchemit@users.nuiton.org 10 Oct '11
10 Oct '11
Author: tchemit
Date: 2011-10-10 10:51:23 +0200 (Mon, 10 Oct 2011)
New Revision: 2351
Url: http://nuiton.org/repositories/revision/topia/2351
Log:
Anomalie #1769: Hibernate mappings fails to load in offline mode
Added:
trunk/topia-persistence/src/main/resources/META-INF/dtd/
trunk/topia-persistence/src/main/resources/META-INF/dtd/hibernate-mapping-3.0.dtd
Modified:
trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java 2011-10-06 23:01:42 UTC (rev 2350)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityHibernateMappingGenerator.java 2011-10-10 08:51:23 UTC (rev 2351)
@@ -121,7 +121,7 @@
return;
}
/*{<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
+<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "classpath://META-INF/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field" auto-import="true" package="<%=input.getPackageName()%>">
}*/
boolean haveSuper = input.getSuperclasses().size() > 0;
Added: trunk/topia-persistence/src/main/resources/META-INF/dtd/hibernate-mapping-3.0.dtd
===================================================================
--- trunk/topia-persistence/src/main/resources/META-INF/dtd/hibernate-mapping-3.0.dtd (rev 0)
+++ trunk/topia-persistence/src/main/resources/META-INF/dtd/hibernate-mapping-3.0.dtd 2011-10-10 08:51:23 UTC (rev 2351)
@@ -0,0 +1,1070 @@
+<!-- Hibernate Mapping DTD.
+
+<!DOCTYPE hibernate-mapping PUBLIC
+ "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+ "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
+
+An instance of this XML document may contain mappings for an arbitrary
+number of classes. The class mappings may contain associations to classes
+mapped in the same document or in another document. No class may be
+mapped more than once. Each document may also contain definitions of an
+arbitrary number of queries, and import declarations of arbitrary classes.
+
+-->
+
+<!--
+ The document root.
+ -->
+
+<!ELEMENT hibernate-mapping (
+ meta*,
+ identifier-generator*,
+ typedef*,
+ filter-def*,
+ import*,
+ (class|subclass|joined-subclass|union-subclass)*,
+ resultset*,
+ (query|sql-query)*,
+ filter-def*,
+ fetch-profile*,
+ database-object*
+)>
+ <!ATTLIST hibernate-mapping schema CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST hibernate-mapping catalog CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST hibernate-mapping default-cascade CDATA "none">
+ <!ATTLIST hibernate-mapping default-access CDATA "property">
+ <!ATTLIST hibernate-mapping default-lazy (true|false) "true">
+ <!ATTLIST hibernate-mapping auto-import (true|false) "true">
+ <!ATTLIST hibernate-mapping package CDATA #IMPLIED> <!-- default: none -->
+
+<!--
+ <meta.../> is used to assign meta-level attributes to a class
+ or property. Is currently used by codegenerator as a placeholder for
+ values that is not directly related to OR mappings.
+-->
+<!ELEMENT meta (#PCDATA)>
+ <!ATTLIST meta attribute CDATA #REQUIRED>
+ <!ATTLIST meta inherit (true|false) "true">
+
+<!--
+ <identifier-generator.../> allows customized short-naming of IdentifierGenerator implementations.
+-->
+<!ELEMENT identifier-generator EMPTY>
+ <!ATTLIST identifier-generator name CDATA #REQUIRED>
+ <!ATTLIST identifier-generator class CDATA #REQUIRED>
+
+<!--
+ <typedef.../> allows defining a customized type mapping for a Hibernate type. May
+ contain parameters for parameterizable types.
+-->
+<!ELEMENT typedef (param*)>
+ <!ATTLIST typedef class CDATA #REQUIRED>
+ <!ATTLIST typedef name CDATA #REQUIRED>
+
+<!--
+ IMPORT element definition; an explicit query language "import"
+-->
+<!ELEMENT import EMPTY>
+ <!ATTLIST import class CDATA #REQUIRED>
+ <!ATTLIST import rename CDATA #IMPLIED> <!-- default: unqualified class name -->
+
+<!--
+ Root entity mapping. Poorly named as entities do not have to be represented by
+ classes at all. Mapped entities may be represented via different methodologies
+ (POJO, Map, Dom4j).
+-->
+<!ELEMENT class (
+ meta*,
+ subselect?,
+ cache?,
+ synchronize*,
+ comment?,
+ tuplizer*,
+ (id|composite-id),
+ discriminator?,
+ natural-id?,
+ (version|timestamp)?,
+ (property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,
+ ((join*,subclass*)|joined-subclass*|union-subclass*),
+ loader?,sql-insert?,sql-update?,sql-delete?,
+ filter*,
+ fetch-profile*,
+ resultset*,
+ (query|sql-query)*
+)>
+ <!ATTLIST class entity-name CDATA #IMPLIED>
+ <!ATTLIST class name CDATA #IMPLIED> <!-- this is the class name -->
+ <!ATTLIST class proxy CDATA #IMPLIED> <!-- default: no proxy interface -->
+ <!ATTLIST class lazy (true|false) #IMPLIED>
+ <!ATTLIST class table CDATA #IMPLIED> <!-- default: unqualified classname -->
+ <!ATTLIST class schema CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST class catalog CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST class subselect CDATA #IMPLIED>
+ <!ATTLIST class discriminator-value CDATA #IMPLIED> <!-- default: unqualified class name | none -->
+ <!ATTLIST class mutable (true|false) "true">
+ <!ATTLIST class abstract (true|false) #IMPLIED>
+ <!ATTLIST class polymorphism (implicit|explicit) "implicit">
+ <!ATTLIST class where CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST class persister CDATA #IMPLIED>
+ <!ATTLIST class dynamic-update (true|false) "false">
+ <!ATTLIST class dynamic-insert (true|false) "false">
+ <!ATTLIST class batch-size CDATA #IMPLIED>
+ <!ATTLIST class select-before-update (true|false) "false">
+ <!ATTLIST class optimistic-lock (none|version|dirty|all) "version">
+ <!ATTLIST class check CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST class rowid CDATA #IMPLIED>
+ <!ATTLIST class node CDATA #IMPLIED>
+
+<!--
+ TUPLIZER element; defines tuplizer to use for a component/entity for a given entity-mode
+-->
+<!ELEMENT tuplizer EMPTY>
+ <!ATTLIST tuplizer entity-mode (pojo|dom4j|dynamic-map) #IMPLIED> <!-- entity mode for which tuplizer is in effect -->
+ <!ATTLIST tuplizer class CDATA #REQUIRED> <!-- the tuplizer class to use -->
+
+<!--
+ FILTER-DEF element; top-level filter definition.
+-->
+<!ELEMENT filter-def (#PCDATA|filter-param)*>
+ <!ATTLIST filter-def name CDATA #REQUIRED> <!-- The filter name -->
+ <!ATTLIST filter-def condition CDATA #IMPLIED>
+
+<!--
+ FILTER-PARAM element; qualifies parameters found within a FILTER-DEF
+ condition.
+-->
+<!ELEMENT filter-param EMPTY>
+ <!ATTLIST filter-param name CDATA #REQUIRED> <!-- The parameter name -->
+ <!ATTLIST filter-param type CDATA #REQUIRED> <!-- The parameter type -->
+
+<!--
+ FILTER element; used to apply a filter.
+-->
+<!ELEMENT filter (#PCDATA)>
+ <!ATTLIST filter name CDATA #REQUIRED>
+ <!ATTLIST filter condition CDATA #IMPLIED>
+
+<!--
+-->
+<!ELEMENT fetch-profile (fetch*)>
+ <!ATTLIST fetch-profile name CDATA #REQUIRED>
+
+<!--
+ The <fetch> element defines a single path to which the fetch
+ refers, as well as the style of fetch to apply. The 'root' of the
+ path is different depending upon the context in which the
+ containing <fetch-profile/> occurs; within a <class/> element,
+ the entity-name of the containing class mapping is assumed...
+-->
+<!ELEMENT fetch EMPTY>
+ <!ATTLIST fetch entity CDATA #IMPLIED> <!-- Implied as long as the containing fetch profile is contained in a class mapping -->
+ <!ATTLIST fetch association CDATA #REQUIRED>
+ <!ATTLIST fetch style (join|select) "join">
+
+<!-- A join allows some properties of a class to be persisted to a second table -->
+
+<!ELEMENT join (
+ subselect?,
+ comment?,
+ key,
+ (property|many-to-one|component|dynamic-component|any)*,
+ sql-insert?,sql-update?,sql-delete?
+)>
+ <!ATTLIST join table CDATA #REQUIRED>
+ <!ATTLIST join schema CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST join catalog CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST join subselect CDATA #IMPLIED>
+ <!ATTLIST join fetch (join|select) "join">
+ <!ATTLIST join inverse (true|false) "false">
+ <!ATTLIST join optional (true|false) "false">
+
+<!-- A natural-id element allows declaration of the unique business key -->
+
+<!ELEMENT natural-id ( (property|many-to-one|component|dynamic-component|any)* )>
+ <!ATTLIST natural-id mutable (true|false) "false">
+
+<!-- Declares the id type, column and generation algorithm for an entity class.
+If a name attribut is given, the id is exposed to the application through the
+named property of the class. If not, the id is only exposed to the application
+via Session.getIdentifier() -->
+
+<!ELEMENT id (meta*,column*,type?,generator?)>
+ <!ATTLIST id name CDATA #IMPLIED>
+ <!ATTLIST id node CDATA #IMPLIED>
+ <!ATTLIST id access CDATA #IMPLIED>
+ <!ATTLIST id column CDATA #IMPLIED>
+ <!ATTLIST id type CDATA #IMPLIED>
+ <!ATTLIST id length CDATA #IMPLIED>
+ <!ATTLIST id unsaved-value CDATA #IMPLIED> <!-- any|none|null|undefined|0|-1|... -->
+
+<!-- A composite key may be modelled by a java class with a property for each
+key column. The class must implement java.io.Serializable and reimplement equals()
+and hashCode(). -->
+
+<!ELEMENT composite-id ( meta*, (key-property|key-many-to-one)+, generator? )>
+ <!ATTLIST composite-id class CDATA #IMPLIED>
+ <!ATTLIST composite-id mapped (true|false) "false">
+ <!ATTLIST composite-id name CDATA #IMPLIED>
+ <!ATTLIST composite-id node CDATA #IMPLIED>
+ <!ATTLIST composite-id access CDATA #IMPLIED>
+ <!ATTLIST composite-id unsaved-value (undefined|any|none) "undefined">
+
+<!-- Polymorphic data requires a column holding a class discriminator value. This
+value is not directly exposed to the application. -->
+
+<!ELEMENT discriminator ((column|formula)?)>
+ <!ATTLIST discriminator column CDATA #IMPLIED> <!-- default: "class"|none -->
+ <!ATTLIST discriminator formula CDATA #IMPLIED>
+ <!ATTLIST discriminator type CDATA "string">
+ <!ATTLIST discriminator not-null (true|false) "true">
+ <!ATTLIST discriminator length CDATA #IMPLIED>
+ <!ATTLIST discriminator force (true|false) "false">
+ <!ATTLIST discriminator insert (true|false) "true">
+
+<!-- Versioned data requires a column holding a version number. This is exposed to the
+application through a property of the Java class. -->
+
+<!ELEMENT version (meta*,column*)>
+ <!ATTLIST version name CDATA #REQUIRED>
+ <!ATTLIST version node CDATA #IMPLIED>
+ <!ATTLIST version access CDATA #IMPLIED>
+ <!ATTLIST version column CDATA #IMPLIED>
+ <!ATTLIST version type CDATA "integer">
+ <!ATTLIST version unsaved-value (null|negative|undefined) "undefined">
+ <!ATTLIST version generated (never|always) "never">
+ <!ATTLIST version insert (true|false) #IMPLIED>
+
+<!ELEMENT timestamp (meta*)>
+ <!ATTLIST timestamp name CDATA #REQUIRED>
+ <!ATTLIST timestamp node CDATA #IMPLIED>
+ <!ATTLIST timestamp column CDATA #IMPLIED>
+ <!ATTLIST timestamp access CDATA #IMPLIED>
+ <!ATTLIST timestamp unsaved-value (null|undefined) "null">
+ <!ATTLIST timestamp source (vm|db) "vm">
+ <!ATTLIST timestamp generated (never|always) "never">
+
+
+<!--
+ Subclass declarations are nested beneath the root class declaration to achieve
+ polymorphic persistence with the table-per-hierarchy mapping strategy.
+
+ See the note on the class element regarding <pojo/> vs. @name usage...
+-->
+<!ELEMENT subclass (
+ meta*,
+ tuplizer*,
+ synchronize*,
+ (property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|idbag|array|primitive-array)*,
+ join*,
+ subclass*,
+ loader?,sql-insert?,sql-update?,sql-delete?,
+ fetch-profile*,
+ resultset*,
+ (query|sql-query)*
+)>
+ <!ATTLIST subclass entity-name CDATA #IMPLIED>
+ <!ATTLIST subclass name CDATA #IMPLIED>
+ <!ATTLIST subclass proxy CDATA #IMPLIED> <!-- default: no proxy interface -->
+ <!ATTLIST subclass discriminator-value CDATA #IMPLIED> <!-- default: unqualified class name | none -->
+ <!ATTLIST subclass dynamic-update (true|false) "false">
+ <!ATTLIST subclass dynamic-insert (true|false) "false">
+ <!ATTLIST subclass select-before-update (true|false) "false">
+ <!ATTLIST subclass extends CDATA #IMPLIED> <!-- default: empty when a toplevel, otherwise the nearest class definition -->
+ <!ATTLIST subclass lazy (true|false) #IMPLIED>
+ <!ATTLIST subclass abstract (true|false) #IMPLIED>
+ <!ATTLIST subclass persister CDATA #IMPLIED>
+ <!ATTLIST subclass batch-size CDATA #IMPLIED>
+ <!ATTLIST subclass node CDATA #IMPLIED>
+
+<!--
+ Joined subclasses are used for the normalized table-per-subclass mapping strategy
+
+ See the note on the class element regarding <pojo/> vs. @name usage...
+-->
+<!ELEMENT joined-subclass (
+ meta*,
+ subselect?,
+ synchronize*,
+ comment?,
+ tuplizer*,
+ key,
+ (property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,
+ joined-subclass*,
+ loader?,sql-insert?,sql-update?,sql-delete?,
+ fetch-profile*,
+ resultset*,
+ (query|sql-query)*
+)>
+ <!ATTLIST joined-subclass entity-name CDATA #IMPLIED>
+ <!ATTLIST joined-subclass name CDATA #IMPLIED>
+ <!ATTLIST joined-subclass proxy CDATA #IMPLIED> <!-- default: no proxy interface -->
+ <!ATTLIST joined-subclass table CDATA #IMPLIED> <!-- default: unqualified class name -->
+ <!ATTLIST joined-subclass schema CDATA #IMPLIED>
+ <!ATTLIST joined-subclass catalog CDATA #IMPLIED>
+ <!ATTLIST joined-subclass subselect CDATA #IMPLIED>
+ <!ATTLIST joined-subclass dynamic-update (true|false) "false">
+ <!ATTLIST joined-subclass dynamic-insert (true|false) "false">
+ <!ATTLIST joined-subclass select-before-update (true|false) "false">
+ <!ATTLIST joined-subclass extends CDATA #IMPLIED> <!-- default: none when toplevel, otherwise the nearest class definition -->
+ <!ATTLIST joined-subclass lazy (true|false) #IMPLIED>
+ <!ATTLIST joined-subclass abstract (true|false) #IMPLIED>
+ <!ATTLIST joined-subclass persister CDATA #IMPLIED>
+ <!ATTLIST joined-subclass check CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST joined-subclass batch-size CDATA #IMPLIED>
+ <!ATTLIST joined-subclass node CDATA #IMPLIED>
+
+<!--
+ Union subclasses are used for the table-per-concrete-class mapping strategy
+
+ See the note on the class element regarding <pojo/> vs. @name usage...
+-->
+<!ELEMENT union-subclass (
+ meta*,
+ subselect?,
+ synchronize*,
+ comment?,
+ tuplizer*,
+ (property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,
+ union-subclass*,
+ loader?,sql-insert?,sql-update?,sql-delete?,
+ fetch-profile*,
+ resultset*,
+ (query|sql-query)*
+)>
+ <!ATTLIST union-subclass entity-name CDATA #IMPLIED>
+ <!ATTLIST union-subclass name CDATA #IMPLIED>
+ <!ATTLIST union-subclass proxy CDATA #IMPLIED> <!-- default: no proxy interface -->
+ <!ATTLIST union-subclass table CDATA #IMPLIED> <!-- default: unqualified class name -->
+ <!ATTLIST union-subclass schema CDATA #IMPLIED>
+ <!ATTLIST union-subclass catalog CDATA #IMPLIED>
+ <!ATTLIST union-subclass subselect CDATA #IMPLIED>
+ <!ATTLIST union-subclass dynamic-update (true|false) "false">
+ <!ATTLIST union-subclass dynamic-insert (true|false) "false">
+ <!ATTLIST union-subclass select-before-update (true|false) "false">
+ <!ATTLIST union-subclass extends CDATA #IMPLIED> <!-- default: none when toplevel, otherwise the nearest class definition -->
+ <!ATTLIST union-subclass lazy (true|false) #IMPLIED>
+ <!ATTLIST union-subclass abstract (true|false) #IMPLIED>
+ <!ATTLIST union-subclass persister CDATA #IMPLIED>
+ <!ATTLIST union-subclass check CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST union-subclass batch-size CDATA #IMPLIED>
+ <!ATTLIST union-subclass node CDATA #IMPLIED>
+
+<!-- Property of an entity class or component, component-element, composite-id, etc.
+JavaBeans style properties are mapped to table columns. -->
+
+<!ELEMENT property (meta*,(column|formula)*,type?)>
+ <!ATTLIST property name CDATA #REQUIRED>
+ <!ATTLIST property node CDATA #IMPLIED>
+ <!ATTLIST property access CDATA #IMPLIED>
+ <!ATTLIST property type CDATA #IMPLIED>
+ <!ATTLIST property column CDATA #IMPLIED>
+ <!ATTLIST property length CDATA #IMPLIED>
+ <!ATTLIST property precision CDATA #IMPLIED>
+ <!ATTLIST property scale CDATA #IMPLIED>
+ <!ATTLIST property not-null (true|false) #IMPLIED>
+ <!ATTLIST property unique (true|false) "false">
+ <!ATTLIST property unique-key CDATA #IMPLIED>
+ <!ATTLIST property index CDATA #IMPLIED> <!-- include the columns spanned by this property in an index -->
+ <!ATTLIST property update (true|false) #IMPLIED>
+ <!ATTLIST property insert (true|false) #IMPLIED>
+ <!ATTLIST property optimistic-lock (true|false) "true"> <!-- only supported for properties of a class (not component) -->
+ <!ATTLIST property formula CDATA #IMPLIED>
+ <!ATTLIST property lazy (true|false) "false">
+ <!ATTLIST property generated (never|insert|always) "never">
+
+<!-- Declares the type of the containing property (overrides an eventually existing type
+attribute of the property). May contain param elements to customize a ParametrizableType. -->
+<!ELEMENT type (param*)>
+ <!ATTLIST type name CDATA #REQUIRED>
+
+<!-- Declares an association between two entities (Or from a component, component element,
+etc. to an entity). -->
+
+<!ELEMENT many-to-one (meta*,(column|formula)*)>
+ <!ATTLIST many-to-one name CDATA #REQUIRED>
+ <!ATTLIST many-to-one access CDATA #IMPLIED>
+ <!ATTLIST many-to-one class CDATA #IMPLIED>
+ <!ATTLIST many-to-one entity-name CDATA #IMPLIED>
+ <!ATTLIST many-to-one column CDATA #IMPLIED>
+ <!ATTLIST many-to-one not-null (true|false) #IMPLIED>
+ <!ATTLIST many-to-one unique (true|false) "false">
+ <!ATTLIST many-to-one unique-key CDATA #IMPLIED>
+ <!ATTLIST many-to-one index CDATA #IMPLIED>
+ <!ATTLIST many-to-one cascade CDATA #IMPLIED>
+ <!ATTLIST many-to-one outer-join (true|false|auto) #IMPLIED>
+ <!ATTLIST many-to-one fetch (join|select) #IMPLIED>
+ <!ATTLIST many-to-one update (true|false) "true">
+ <!ATTLIST many-to-one insert (true|false) "true">
+ <!ATTLIST many-to-one optimistic-lock (true|false) "true"> <!-- only supported for properties of a class (not component) -->
+ <!ATTLIST many-to-one foreign-key CDATA #IMPLIED>
+ <!ATTLIST many-to-one property-ref CDATA #IMPLIED>
+ <!ATTLIST many-to-one formula CDATA #IMPLIED>
+ <!ATTLIST many-to-one lazy (false|proxy|no-proxy) #IMPLIED>
+ <!ATTLIST many-to-one not-found (exception|ignore) "exception">
+ <!ATTLIST many-to-one node CDATA #IMPLIED>
+ <!ATTLIST many-to-one embed-xml (true|false) "true">
+
+<!-- Declares a one-to-one association between two entities (Or from a component,
+component element, etc. to an entity). -->
+
+<!ELEMENT one-to-one (meta*,formula*)>
+ <!ATTLIST one-to-one name CDATA #REQUIRED>
+ <!ATTLIST one-to-one formula CDATA #IMPLIED>
+ <!ATTLIST one-to-one access CDATA #IMPLIED>
+ <!ATTLIST one-to-one class CDATA #IMPLIED>
+ <!ATTLIST one-to-one entity-name CDATA #IMPLIED>
+ <!ATTLIST one-to-one cascade CDATA #IMPLIED>
+ <!ATTLIST one-to-one outer-join (true|false|auto) #IMPLIED>
+ <!ATTLIST one-to-one fetch (join|select) #IMPLIED>
+ <!ATTLIST one-to-one constrained (true|false) "false">
+ <!ATTLIST one-to-one foreign-key CDATA #IMPLIED>
+ <!ATTLIST one-to-one property-ref CDATA #IMPLIED>
+ <!ATTLIST one-to-one lazy (false|proxy|no-proxy) #IMPLIED>
+ <!ATTLIST one-to-one node CDATA #IMPLIED>
+ <!ATTLIST one-to-one embed-xml (true|false) "true">
+
+<!-- A property embedded in a composite identifier or map index (always not-null). -->
+
+<!ELEMENT key-property (meta*,column*,type?)>
+ <!ATTLIST key-property name CDATA #REQUIRED>
+ <!ATTLIST key-property access CDATA #IMPLIED>
+ <!ATTLIST key-property type CDATA #IMPLIED>
+ <!ATTLIST key-property column CDATA #IMPLIED>
+ <!ATTLIST key-property length CDATA #IMPLIED>
+ <!ATTLIST key-property node CDATA #IMPLIED>
+
+<!-- A many-to-one association embedded in a composite identifier or map index
+(always not-null, never cascade). -->
+
+<!ELEMENT key-many-to-one (meta*,column*)>
+ <!ATTLIST key-many-to-one name CDATA #REQUIRED>
+ <!ATTLIST key-many-to-one access CDATA #IMPLIED>
+ <!ATTLIST key-many-to-one class CDATA #IMPLIED>
+ <!ATTLIST key-many-to-one entity-name CDATA #IMPLIED>
+ <!ATTLIST key-many-to-one column CDATA #IMPLIED>
+ <!ATTLIST key-many-to-one foreign-key CDATA #IMPLIED>
+ <!ATTLIST key-many-to-one lazy (false|proxy) #IMPLIED>
+
+<!-- An "any" association is a polymorphic association to any table with
+the given identifier type. The first listed column is a VARCHAR column
+holding the name of the class (for that row). -->
+
+<!ELEMENT any (meta*,meta-value*,column,column+)>
+ <!ATTLIST any id-type CDATA #REQUIRED>
+ <!ATTLIST any meta-type CDATA #IMPLIED> <!--- default: Hibernate.STRING -->
+ <!ATTLIST any name CDATA #REQUIRED>
+ <!ATTLIST any access CDATA #IMPLIED>
+ <!ATTLIST any insert (true|false) "true">
+ <!ATTLIST any update (true|false) "true">
+ <!ATTLIST any cascade CDATA #IMPLIED>
+ <!ATTLIST any index CDATA #IMPLIED> <!-- include the columns spanned by this association in an index -->
+ <!ATTLIST any optimistic-lock (true|false) "true"> <!-- only supported for properties of a class (not component) -->
+ <!ATTLIST any lazy (true|false) "false">
+ <!ATTLIST any node CDATA #IMPLIED>
+
+<!ELEMENT meta-value EMPTY>
+ <!ATTLIST meta-value value CDATA #REQUIRED>
+ <!ATTLIST meta-value class CDATA #REQUIRED>
+
+<!-- A component is a user-defined class, persisted along with its containing entity
+to the table of the entity class. JavaBeans style properties of the component are
+mapped to columns of the table of the containing entity. A null component reference
+is mapped to null values in all columns and vice versa. Components do not support
+shared reference semantics. -->
+
+<!ELEMENT component (
+ meta*,
+ tuplizer*,
+ parent?,
+ (property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|array|primitive-array)*
+)>
+ <!ATTLIST component class CDATA #IMPLIED>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ATTLIST component access CDATA #IMPLIED>
+ <!ATTLIST component unique (true|false) "false">
+ <!ATTLIST component update (true|false) "true">
+ <!ATTLIST component insert (true|false) "true">
+ <!ATTLIST component lazy (true|false) "false">
+ <!ATTLIST component optimistic-lock (true|false) "true">
+ <!ATTLIST component node CDATA #IMPLIED>
+
+<!-- A dynamic-component maps columns of the database entity to a java.util.Map
+at the Java level -->
+
+<!ELEMENT dynamic-component (
+ (property|many-to-one|one-to-one|component|dynamic-component|any|map|set|list|bag|array|primitive-array)*
+)>
+ <!ATTLIST dynamic-component name CDATA #REQUIRED>
+ <!ATTLIST dynamic-component access CDATA #IMPLIED>
+ <!ATTLIST dynamic-component unique (true|false) "false">
+ <!ATTLIST dynamic-component update (true|false) "true">
+ <!ATTLIST dynamic-component insert (true|false) "true">
+ <!ATTLIST dynamic-component optimistic-lock (true|false) "true">
+ <!ATTLIST dynamic-component node CDATA #IMPLIED>
+
+<!-- properties declares that the contained properties form an alternate key. The name
+attribute allows an alternate key to be used as the target of a property-ref. -->
+
+<!ELEMENT properties (
+ (property|many-to-one|component|dynamic-component)*
+)>
+ <!ATTLIST properties name CDATA #REQUIRED>
+ <!ATTLIST properties unique (true|false) "false">
+ <!ATTLIST properties insert (true|false) "true">
+ <!ATTLIST properties update (true|false) "true">
+ <!ATTLIST properties optimistic-lock (true|false) "true">
+ <!ATTLIST properties node CDATA #IMPLIED>
+
+<!-- The parent element maps a property of the component class as a pointer back to
+the owning entity. -->
+
+<!ELEMENT parent EMPTY>
+ <!ATTLIST parent name CDATA #REQUIRED>
+
+<!-- Collection declarations nested inside a class declaration indicate a foreign key
+relationship from the collection table to the enclosing class. -->
+
+<!ELEMENT map (
+ meta*,
+ subselect?,
+ cache?,
+ synchronize*,
+ comment?,
+ key,
+ (map-key|composite-map-key|map-key-many-to-many|index|composite-index|index-many-to-many|index-many-to-any),
+ (element|one-to-many|many-to-many|composite-element|many-to-any),
+ loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
+ filter*
+)>
+ <!ATTLIST map name CDATA #REQUIRED>
+ <!ATTLIST map access CDATA #IMPLIED>
+ <!ATTLIST map table CDATA #IMPLIED> <!-- default: name -->
+ <!ATTLIST map schema CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST map subselect CDATA #IMPLIED>
+ <!ATTLIST map catalog CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST map lazy (true|false|extra) #IMPLIED>
+ <!ATTLIST map mutable (true|false) "true">
+ <!ATTLIST map inverse (true|false) "false">
+ <!ATTLIST map sort CDATA "unsorted"> <!-- unsorted|natural|"comparator class", default: unsorted -->
+ <!ATTLIST map cascade CDATA #IMPLIED>
+ <!ATTLIST map order-by CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST map where CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST map batch-size CDATA #IMPLIED>
+ <!ATTLIST map outer-join (true|false|auto) #IMPLIED>
+ <!ATTLIST map fetch (join|select|subselect) #IMPLIED>
+ <!ATTLIST map check CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST map persister CDATA #IMPLIED>
+ <!ATTLIST map collection-type CDATA #IMPLIED>
+ <!ATTLIST map optimistic-lock (true|false) "true"> <!-- only supported for properties of a class (not component) -->
+ <!ATTLIST map node CDATA #IMPLIED>
+ <!ATTLIST map embed-xml (true|false) "true">
+
+<!ELEMENT set (
+ meta*,
+ subselect?,
+ cache?,
+ synchronize*,
+ comment?,
+ key,
+ (element|one-to-many|many-to-many|composite-element|many-to-any),
+ loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
+ filter*
+)>
+ <!ATTLIST set name CDATA #REQUIRED>
+ <!ATTLIST set access CDATA #IMPLIED>
+ <!ATTLIST set table CDATA #IMPLIED> <!-- default: name -->
+ <!ATTLIST set schema CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST set catalog CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST set subselect CDATA #IMPLIED>
+ <!ATTLIST set lazy (true|false|extra) #IMPLIED>
+ <!ATTLIST set sort CDATA "unsorted"> <!-- unsorted|natural|"comparator class" -->
+ <!ATTLIST set inverse (true|false) "false">
+ <!ATTLIST set mutable (true|false) "true">
+ <!ATTLIST set cascade CDATA #IMPLIED>
+ <!ATTLIST set order-by CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST set where CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST set batch-size CDATA #IMPLIED>
+ <!ATTLIST set outer-join (true|false|auto) #IMPLIED>
+ <!ATTLIST set fetch (join|select|subselect) #IMPLIED>
+ <!ATTLIST set persister CDATA #IMPLIED>
+ <!ATTLIST set collection-type CDATA #IMPLIED>
+ <!ATTLIST set check CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST set optimistic-lock (true|false) "true"> <!-- only supported for properties of a class (not component) -->
+ <!ATTLIST set node CDATA #IMPLIED>
+ <!ATTLIST set embed-xml (true|false) "true">
+
+<!ELEMENT bag (
+ meta*,
+ subselect?,
+ cache?,
+ synchronize*,
+ comment?,
+ key,
+ (element|one-to-many|many-to-many|composite-element|many-to-any),
+ loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
+ filter*
+)>
+ <!ATTLIST bag name CDATA #REQUIRED>
+ <!ATTLIST bag access CDATA #IMPLIED>
+ <!ATTLIST bag table CDATA #IMPLIED> <!-- default: name -->
+ <!ATTLIST bag schema CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST bag catalog CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST bag subselect CDATA #IMPLIED>
+ <!ATTLIST bag lazy (true|false|extra) #IMPLIED>
+ <!ATTLIST bag inverse (true|false) "false">
+ <!ATTLIST bag mutable (true|false) "true">
+ <!ATTLIST bag cascade CDATA #IMPLIED>
+ <!ATTLIST bag order-by CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST bag where CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST bag batch-size CDATA #IMPLIED>
+ <!ATTLIST bag outer-join (true|false|auto) #IMPLIED>
+ <!ATTLIST bag fetch (join|select|subselect) #IMPLIED>
+ <!ATTLIST bag persister CDATA #IMPLIED>
+ <!ATTLIST bag collection-type CDATA #IMPLIED>
+ <!ATTLIST bag check CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST bag optimistic-lock (true|false) "true"> <!-- only supported for properties of a class (not component) -->
+ <!ATTLIST bag node CDATA #IMPLIED>
+ <!ATTLIST bag embed-xml (true|false) "true">
+
+<!ELEMENT idbag (
+ meta*,
+ subselect?,
+ cache?,
+ synchronize*,
+ comment?,
+ collection-id,
+ key,
+ (element|many-to-many|composite-element|many-to-any),
+ loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
+ filter*
+)>
+ <!ATTLIST idbag name CDATA #REQUIRED>
+ <!ATTLIST idbag access CDATA #IMPLIED>
+ <!ATTLIST idbag table CDATA #IMPLIED> <!-- default: name -->
+ <!ATTLIST idbag schema CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST idbag catalog CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST idbag subselect CDATA #IMPLIED>
+ <!ATTLIST idbag lazy (true|false|extra) #IMPLIED>
+ <!ATTLIST idbag mutable (true|false) "true">
+ <!ATTLIST idbag cascade CDATA #IMPLIED>
+ <!ATTLIST idbag order-by CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST idbag where CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST idbag batch-size CDATA #IMPLIED>
+ <!ATTLIST idbag outer-join (true|false|auto) #IMPLIED>
+ <!ATTLIST idbag fetch (join|select|subselect) #IMPLIED>
+ <!ATTLIST idbag persister CDATA #IMPLIED>
+ <!ATTLIST idbag collection-type CDATA #IMPLIED>
+ <!ATTLIST idbag check CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST idbag optimistic-lock (true|false) "true"> <!-- only supported for properties of a class (not component) -->
+ <!ATTLIST idbag node CDATA #IMPLIED>
+ <!ATTLIST idbag embed-xml (true|false) "true">
+
+<!ELEMENT list (
+ meta*,
+ subselect?,
+ cache?,
+ synchronize*,
+ comment?,
+ key,
+ (index|list-index),
+ (element|one-to-many|many-to-many|composite-element|many-to-any),
+ loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
+ filter*
+)>
+ <!ATTLIST list name CDATA #REQUIRED>
+ <!ATTLIST list access CDATA #IMPLIED>
+ <!ATTLIST list table CDATA #IMPLIED> <!-- default: name -->
+ <!ATTLIST list schema CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST list catalog CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST list subselect CDATA #IMPLIED>
+ <!ATTLIST list lazy (true|false|extra) #IMPLIED>
+ <!ATTLIST list inverse (true|false) "false">
+ <!ATTLIST list mutable (true|false) "true">
+ <!ATTLIST list cascade CDATA #IMPLIED>
+ <!ATTLIST list where CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST list batch-size CDATA #IMPLIED>
+ <!ATTLIST list outer-join (true|false|auto) #IMPLIED>
+ <!ATTLIST list fetch (join|select|subselect) #IMPLIED>
+ <!ATTLIST list persister CDATA #IMPLIED>
+ <!ATTLIST list collection-type CDATA #IMPLIED>
+ <!ATTLIST list check CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST list optimistic-lock (true|false) "true"> <!-- only supported for properties of a class (not component) -->
+ <!ATTLIST list node CDATA #IMPLIED>
+ <!ATTLIST list embed-xml (true|false) "true">
+
+<!ELEMENT array (
+ meta*,
+ subselect?,
+ cache?,
+ synchronize*,
+ comment?,
+ key,
+ (index|list-index),
+ (element|one-to-many|many-to-many|composite-element|many-to-any),
+ loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?
+)>
+ <!ATTLIST array name CDATA #REQUIRED>
+ <!ATTLIST array access CDATA #IMPLIED>
+ <!ATTLIST array table CDATA #IMPLIED> <!-- default: name -->
+ <!ATTLIST array schema CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST array catalog CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST array subselect CDATA #IMPLIED>
+ <!ATTLIST array inverse (true|false) "false">
+ <!ATTLIST array mutable (true|false) "true">
+ <!ATTLIST array element-class CDATA #IMPLIED>
+ <!ATTLIST array cascade CDATA #IMPLIED>
+ <!ATTLIST array where CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST array batch-size CDATA #IMPLIED>
+ <!ATTLIST array outer-join (true|false|auto) #IMPLIED>
+ <!ATTLIST array fetch (join|select|subselect) #IMPLIED>
+ <!ATTLIST array persister CDATA #IMPLIED>
+ <!ATTLIST array collection-type CDATA #IMPLIED>
+ <!ATTLIST array check CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST array optimistic-lock (true|false) "true"> <!-- only supported for properties of a class (not component) -->
+ <!ATTLIST array node CDATA #IMPLIED>
+ <!ATTLIST array embed-xml (true|false) "true">
+
+<!ELEMENT primitive-array (
+ meta*,
+ subselect?,
+ cache?,
+ synchronize*,
+ comment?,
+ key,
+ (index|list-index),
+ element,
+ loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?
+)>
+ <!ATTLIST primitive-array name CDATA #REQUIRED>
+ <!ATTLIST primitive-array access CDATA #IMPLIED>
+ <!ATTLIST primitive-array table CDATA #IMPLIED> <!-- default: name -->
+ <!ATTLIST primitive-array schema CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST primitive-array catalog CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST primitive-array subselect CDATA #IMPLIED>
+ <!ATTLIST primitive-array mutable (true|false) "true">
+ <!ATTLIST primitive-array where CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST primitive-array batch-size CDATA #IMPLIED>
+ <!ATTLIST primitive-array outer-join (true|false|auto) #IMPLIED>
+ <!ATTLIST primitive-array fetch (join|select|subselect) #IMPLIED>
+ <!ATTLIST primitive-array persister CDATA #IMPLIED>
+ <!ATTLIST primitive-array collection-type CDATA #IMPLIED>
+ <!ATTLIST primitive-array check CDATA #IMPLIED> <!-- default: none -->
+ <!ATTLIST primitive-array optimistic-lock (true|false) "true"> <!-- only supported for properties of a class (not component) -->
+ <!ATTLIST primitive-array node CDATA #IMPLIED>
+ <!ATTLIST primitive-array embed-xml (true|false) "true">
+
+<!-- Declares the element type of a collection of basic type -->
+
+<!ELEMENT element ( (column|formula)*, type? )>
+ <!ATTLIST element column CDATA #IMPLIED>
+ <!ATTLIST element node CDATA #IMPLIED>
+ <!ATTLIST element formula CDATA #IMPLIED>
+ <!ATTLIST element type CDATA #IMPLIED>
+ <!ATTLIST element length CDATA #IMPLIED>
+ <!ATTLIST element precision CDATA #IMPLIED>
+ <!ATTLIST element scale CDATA #IMPLIED>
+ <!ATTLIST element not-null (true|false) "false">
+ <!ATTLIST element unique (true|false) "false">
+
+<!-- One to many association. This tag declares the entity-class
+element type of a collection and specifies a one-to-many relational model -->
+
+<!ELEMENT one-to-many EMPTY>
+ <!ATTLIST one-to-many class CDATA #IMPLIED>
+ <!ATTLIST one-to-many not-found (exception|ignore) "exception">
+ <!ATTLIST one-to-many node CDATA #IMPLIED>
+ <!ATTLIST one-to-many embed-xml (true|false) "true">
+ <!ATTLIST one-to-many entity-name CDATA #IMPLIED>
+ <!-- No column declaration attributes required in this case. The primary
+ key column of the associated class is already mapped elsewhere.-->
+
+<!-- Many to many association. This tag declares the entity-class
+element type of a collection and specifies a many-to-many relational model -->
+
+<!ELEMENT many-to-many (meta*,(column|formula)*,filter*)>
+ <!ATTLIST many-to-many class CDATA #IMPLIED>
+ <!ATTLIST many-to-many node CDATA #IMPLIED>
+ <!ATTLIST many-to-many embed-xml (true|false) "true">
+ <!ATTLIST many-to-many entity-name CDATA #IMPLIED>
+ <!ATTLIST many-to-many column CDATA #IMPLIED>
+ <!ATTLIST many-to-many formula CDATA #IMPLIED>
+ <!ATTLIST many-to-many not-found (exception|ignore) "exception">
+ <!ATTLIST many-to-many outer-join (true|false|auto) #IMPLIED>
+ <!ATTLIST many-to-many fetch (join|select) #IMPLIED>
+ <!ATTLIST many-to-many lazy (false|proxy) #IMPLIED>
+ <!ATTLIST many-to-many foreign-key CDATA #IMPLIED>
+ <!ATTLIST many-to-many unique (true|false) "false">
+ <!ATTLIST many-to-many where CDATA #IMPLIED>
+ <!ATTLIST many-to-many order-by CDATA #IMPLIED>
+ <!ATTLIST many-to-many property-ref CDATA #IMPLIED>
+
+<!-- A composite element allows a collection to hold instances of an arbitrary
+class, without the requirement of joining to an entity table. Composite elements
+have component semantics - no shared references and ad hoc null value semantics.
+Composite elements may not hold nested collections. -->
+
+<!ELEMENT composite-element (
+ (meta*),
+ parent?,
+ tuplizer*,
+ (property|many-to-one|any|nested-composite-element)*
+)>
+ <!ATTLIST composite-element class CDATA #REQUIRED>
+ <!ATTLIST composite-element node CDATA #IMPLIED>
+
+<!ELEMENT nested-composite-element (
+ parent?,
+ tuplizer*,
+ (property|many-to-one|any|nested-composite-element)*
+)>
+ <!ATTLIST nested-composite-element class CDATA #REQUIRED>
+ <!ATTLIST nested-composite-element name CDATA #REQUIRED>
+ <!ATTLIST nested-composite-element access CDATA #IMPLIED>
+ <!ATTLIST nested-composite-element node CDATA #IMPLIED>
+
+<!-- Declares the column name of a foreign key. -->
+
+<!ELEMENT key (column*)>
+ <!ATTLIST key column CDATA #IMPLIED>
+ <!ATTLIST key property-ref CDATA #IMPLIED>
+ <!ATTLIST key foreign-key CDATA #IMPLIED>
+ <!ATTLIST key on-delete (cascade|noaction) "noaction">
+ <!ATTLIST key not-null (true|false) #IMPLIED>
+ <!ATTLIST key update (true|false) #IMPLIED>
+ <!ATTLIST key unique (true|false) #IMPLIED>
+
+<!-- Declares the type and column mapping for a collection index (array or
+list index, or key of a map). -->
+
+<!ELEMENT list-index (column?)>
+ <!ATTLIST list-index column CDATA #IMPLIED>
+ <!ATTLIST list-index base CDATA "0">
+
+<!ELEMENT map-key ((column|formula)*,type?)>
+ <!ATTLIST map-key column CDATA #IMPLIED>
+ <!ATTLIST map-key formula CDATA #IMPLIED>
+ <!ATTLIST map-key type CDATA #IMPLIED>
+ <!ATTLIST map-key length CDATA #IMPLIED>
+ <!ATTLIST map-key node CDATA #IMPLIED>
+
+<!ELEMENT index (column*)>
+ <!ATTLIST index column CDATA #IMPLIED>
+ <!ATTLIST index type CDATA #IMPLIED> <!-- required for maps -->
+ <!ATTLIST index length CDATA #IMPLIED>
+
+<!-- Many to many association mapped to the key of a map. ie. a map keyed
+on entities. -->
+
+<!ELEMENT map-key-many-to-many ((column|formula)*)>
+ <!ATTLIST map-key-many-to-many class CDATA #IMPLIED>
+ <!ATTLIST map-key-many-to-many entity-name CDATA #IMPLIED>
+ <!ATTLIST map-key-many-to-many column CDATA #IMPLIED>
+ <!ATTLIST map-key-many-to-many formula CDATA #IMPLIED>
+ <!ATTLIST map-key-many-to-many foreign-key CDATA #IMPLIED>
+
+<!ELEMENT index-many-to-many (column*)>
+ <!ATTLIST index-many-to-many class CDATA #REQUIRED>
+ <!ATTLIST index-many-to-many entity-name CDATA #IMPLIED>
+ <!ATTLIST index-many-to-many column CDATA #IMPLIED>
+ <!ATTLIST index-many-to-many foreign-key CDATA #IMPLIED>
+
+<!-- Composite index of a map ie. a map keyed on components. -->
+
+<!ELEMENT composite-map-key ( (key-property|key-many-to-one)+ )>
+ <!ATTLIST composite-map-key class CDATA #REQUIRED>
+
+<!ELEMENT composite-index ( (key-property|key-many-to-one)+ )>
+ <!ATTLIST composite-index class CDATA #REQUIRED>
+
+<!-- A "many to any" defines a polymorphic association to any table
+with the given identifier type. The first listed column is a VARCHAR column
+holding the name of the class (for that row). -->
+
+<!ELEMENT many-to-any (meta-value*,column, column+)>
+ <!ATTLIST many-to-any id-type CDATA #REQUIRED>
+ <!ATTLIST many-to-any meta-type CDATA #IMPLIED> <!--- default: Hibernate.CLASS -->
+
+<!ELEMENT index-many-to-any (column, column+)>
+ <!ATTLIST index-many-to-any id-type CDATA #REQUIRED>
+ <!ATTLIST index-many-to-any meta-type CDATA #IMPLIED> <!--- default: Hibernate.CLASS -->
+
+<!ELEMENT collection-id (meta*, column*, generator)>
+ <!ATTLIST collection-id column CDATA #REQUIRED>
+ <!ATTLIST collection-id type CDATA #REQUIRED>
+ <!ATTLIST collection-id length CDATA #IMPLIED>
+
+<!-- Generators generate unique identifiers. The class attribute specifies a Java
+class implementing an id generation algorithm. -->
+
+<!ELEMENT generator (param*)>
+ <!ATTLIST generator class CDATA #REQUIRED>
+<!ELEMENT param (#PCDATA)>
+ <!ATTLIST param name CDATA #REQUIRED>
+
+<!-- The column element is an alternative to column attributes and required for
+mapping associations to classes with composite ids. -->
+
+<!ELEMENT column (comment?)>
+ <!ATTLIST column name CDATA #REQUIRED>
+ <!ATTLIST column length CDATA #IMPLIED> <!-- default: 255 -->
+ <!ATTLIST column precision CDATA #IMPLIED>
+ <!ATTLIST column scale CDATA #IMPLIED>
+ <!ATTLIST column not-null (true|false) #IMPLIED> <!-- default: false (except for id properties) -->
+ <!ATTLIST column unique (true|false) #IMPLIED> <!-- default: false (except for id properties) -->
+ <!ATTLIST column unique-key CDATA #IMPLIED> <!-- default: no unique key -->
+ <!ATTLIST column sql-type CDATA #IMPLIED> <!-- override default column type for hibernate type -->
+ <!ATTLIST column index CDATA #IMPLIED>
+ <!ATTLIST column check CDATA #IMPLIED> <!-- default: no check constraint -->
+ <!ATTLIST column default CDATA #IMPLIED> <!-- default: no default value -->
+ <!ATTLIST column read CDATA #IMPLIED> <!-- default: column name -->
+ <!ATTLIST column write CDATA #IMPLIED> <!-- default: parameter placeholder ('?') -->
+
+<!-- The formula and subselect elements allow us to map derived properties and
+entities. -->
+
+<!ELEMENT formula (#PCDATA)>
+<!ELEMENT subselect (#PCDATA)>
+
+<!-- The cache element enables caching of an entity class. -->
+<!ELEMENT cache EMPTY>
+ <!ATTLIST cache usage (read-only|read-write|nonstrict-read-write|transactional) #REQUIRED>
+ <!ATTLIST cache region CDATA #IMPLIED> <!-- default: class or collection role name -->
+ <!ATTLIST cache include (all|non-lazy) "all">
+
+<!-- The comment element allows definition of a database table or column comment. -->
+
+<!ELEMENT comment (#PCDATA)>
+
+<!-- The loader element allows specification of a named query to be used for fetching
+an entity or collection -->
+
+<!ELEMENT loader EMPTY>
+ <!ATTLIST loader query-ref CDATA #REQUIRED>
+
+<!-- The query element declares a named Hibernate query string -->
+
+<!ELEMENT query (#PCDATA|query-param)*>
+ <!ATTLIST query name CDATA #REQUIRED>
+ <!ATTLIST query flush-mode (auto|never|always) #IMPLIED>
+ <!ATTLIST query cacheable (true|false) "false">
+ <!ATTLIST query cache-region CDATA #IMPLIED>
+ <!ATTLIST query fetch-size CDATA #IMPLIED>
+ <!ATTLIST query timeout CDATA #IMPLIED>
+ <!ATTLIST query cache-mode (get|ignore|normal|put|refresh) #IMPLIED>
+ <!ATTLIST query read-only (true|false) #IMPLIED>
+ <!ATTLIST query comment CDATA #IMPLIED>
+
+<!-- The sql-query element declares a named SQL query string -->
+
+<!ELEMENT sql-query (#PCDATA|return-scalar|return|return-join|load-collection|synchronize|query-param)*>
+ <!ATTLIST sql-query name CDATA #REQUIRED>
+ <!ATTLIST sql-query resultset-ref CDATA #IMPLIED>
+ <!ATTLIST sql-query flush-mode (auto|never|always) #IMPLIED>
+ <!ATTLIST sql-query cacheable (true|false) "false">
+ <!ATTLIST sql-query cache-region CDATA #IMPLIED>
+ <!ATTLIST sql-query fetch-size CDATA #IMPLIED>
+ <!ATTLIST sql-query timeout CDATA #IMPLIED>
+ <!ATTLIST sql-query cache-mode (get|ignore|normal|put|refresh) #IMPLIED>
+ <!ATTLIST sql-query read-only (true|false) #IMPLIED>
+ <!ATTLIST sql-query comment CDATA #IMPLIED>
+ <!ATTLIST sql-query callable (true|false) "false">
+
+<!-- The query-param element is used only by tools that generate
+finder methods for named queries -->
+
+<!ELEMENT query-param EMPTY>
+ <!ATTLIST query-param name CDATA #REQUIRED>
+ <!ATTLIST query-param type CDATA #REQUIRED>
+
+<!-- The resultset element declares a named resultset mapping definition for SQL queries -->
+<!ELEMENT resultset (return-scalar|return|return-join|load-collection)*>
+ <!ATTLIST resultset name CDATA #REQUIRED>
+
+<!--
+ Defines a return component for a sql-query. Alias refers to the alias
+ used in the actual sql query; lock-mode specifies the locking to be applied
+ when the query is executed. The class, collection, and role attributes are mutually exclusive;
+ class refers to the class name of a "root entity" in the object result; collection refers
+ to a collection of a given class and is used to define custom sql to load that owned collection
+ and takes the form "ClassName.propertyName"; role refers to the property path for an eager fetch
+ and takes the form "owningAlias.propertyName"
+-->
+<!ELEMENT return (return-discriminator?,return-property)*>
+ <!ATTLIST return alias CDATA #IMPLIED>
+ <!ATTLIST return entity-name CDATA #IMPLIED>
+ <!ATTLIST return class CDATA #IMPLIED>
+ <!ATTLIST return lock-mode (none|read|upgrade|upgrade-nowait|write) "read">
+
+<!ELEMENT return-property (return-column*)>
+ <!ATTLIST return-property name CDATA #REQUIRED>
+ <!ATTLIST return-property column CDATA #IMPLIED>
+
+<!ELEMENT return-column EMPTY>
+ <!ATTLIST return-column name CDATA #REQUIRED>
+
+<!ELEMENT return-discriminator EMPTY>
+ <!ATTLIST return-discriminator column CDATA #REQUIRED>
+
+<!ELEMENT return-join (return-property)*>
+ <!ATTLIST return-join alias CDATA #REQUIRED>
+ <!ATTLIST return-join property CDATA #REQUIRED>
+ <!ATTLIST return-join lock-mode (none|read|upgrade|upgrade-nowait|write) "read">
+
+<!ELEMENT load-collection (return-property)*>
+ <!ATTLIST load-collection alias CDATA #REQUIRED>
+ <!ATTLIST load-collection role CDATA #REQUIRED>
+ <!ATTLIST load-collection lock-mode (none|read|upgrade|upgrade-nowait|write) "read">
+
+<!ELEMENT return-scalar EMPTY>
+ <!ATTLIST return-scalar column CDATA #REQUIRED>
+ <!ATTLIST return-scalar type CDATA #IMPLIED>
+
+<!ELEMENT synchronize EMPTY>
+ <!ATTLIST synchronize table CDATA #REQUIRED>
+
+<!-- custom sql operations -->
+<!ELEMENT sql-insert (#PCDATA)>
+ <!ATTLIST sql-insert callable (true|false) "false">
+ <!ATTLIST sql-insert check (none|rowcount|param) #IMPLIED>
+
+<!ELEMENT sql-update (#PCDATA)>
+ <!ATTLIST sql-update callable (true|false) "false">
+ <!ATTLIST sql-update check (none|rowcount|param) #IMPLIED>
+
+<!ELEMENT sql-delete (#PCDATA)>
+ <!ATTLIST sql-delete callable (true|false) "false">
+ <!ATTLIST sql-delete check (none|rowcount|param) #IMPLIED>
+
+<!ELEMENT sql-delete-all (#PCDATA)>
+ <!ATTLIST sql-delete-all callable (true|false) "false">
+ <!ATTLIST sql-delete-all check (none|rowcount|param) #IMPLIED>
+
+<!--
+ Element for defining "auxiliary" database objects. Must be one of two forms:
+
+ #1 :
+ <database-object>
+ <definition class="CustomClassExtendingAuxiliaryObject"/>
+ </database-object>
+
+ #2 :
+ <database-object>
+ <create>CREATE OR REPLACE ....</create>
+ <drop>DROP ....</drop>
+ </database-object>
+-->
+<!ELEMENT database-object ( (definition|(create,drop)), dialect-scope* )>
+
+<!ELEMENT definition EMPTY>
+ <!ATTLIST definition class CDATA #REQUIRED>
+
+<!ELEMENT create (#PCDATA)>
+<!ELEMENT drop (#PCDATA)>
+
+<!--
+ dialect-scope element allows scoping auxiliary-objects to a particular
+ Hibernate dialect implementation.
+-->
+<!ELEMENT dialect-scope (#PCDATA)>
+ <!ATTLIST dialect-scope name CDATA #REQUIRED>
+
Property changes on: trunk/topia-persistence/src/main/resources/META-INF/dtd/hibernate-mapping-3.0.dtd
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
1
0
r2350 - trunk/topia-persistence/src/main/java/org/nuiton/topia/framework
by echatellier@users.nuiton.org 06 Oct '11
by echatellier@users.nuiton.org 06 Oct '11
06 Oct '11
Author: echatellier
Date: 2011-10-07 01:01:42 +0200 (Fri, 07 Oct 2011)
New Revision: 2350
Url: http://nuiton.org/repositories/revision/topia/2350
Log:
Add comment
Modified:
trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2011-10-04 07:10:47 UTC (rev 2349)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2011-10-06 23:01:42 UTC (rev 2350)
@@ -643,6 +643,14 @@
if (log.isDebugEnabled()) {
log.debug("Load persistent class : " + classname);
}
+
+ // XXX echatellier 20111007 ce cqui est dommage ici, c'est
+ // la definition de cette classe ne sert a rien (apart security)
+ // car pour hibernate hibernateConfiguration.addClass(persistanceClass)
+ // il ne se sert pas de la classe en fait et fait seulement
+ // un classname.replace( '.', '/' ) + ".hbm.xml";
+ // pour obtenir le mapping et la reinstancier ensuite
+
Class<?> clazz;
try {
clazz = Class.forName(classname);
1
0
r2349 - trunk/topia-persistence/src/main/java/org/nuiton/topia/generator
by tchemit@users.nuiton.org 04 Oct '11
by tchemit@users.nuiton.org 04 Oct '11
04 Oct '11
Author: tchemit
Date: 2011-10-04 09:10:47 +0200 (Tue, 04 Oct 2011)
New Revision: 2349
Url: http://nuiton.org/repositories/revision/topia/2349
Log:
Evolution #1766: Do not generate DAOImpl if already found in classpath
Modified:
trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2011-10-03 16:34:57 UTC (rev 2348)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2011-10-04 07:10:47 UTC (rev 2349)
@@ -49,6 +49,7 @@
import org.nuiton.topia.persistence.TopiaEntity;
import org.nuiton.util.StringUtil;
+import java.net.URL;
import java.security.Permission;
import java.util.ArrayList;
import java.util.Collection;
@@ -228,13 +229,48 @@
// generate DAO
generateDAOClass(clazz, clazzName, clazzFQN);
- // generate DAOImpl
- generateDAOImpl(clazz, clazzName, clazzFQN);
+ if (isGenerateImpl(clazz)) {
+ // generate DAOImpl
+ generateDAOImpl(clazz, clazzName, clazzFQN);
+ }
+
// generate DAOAbstract
generateDAOAbstract(clazz, clazzName, clazzFQN);
}
+ protected boolean isGenerateImpl(ObjectModelClass input) {
+
+ String fqn = input.getQualifiedName() + "DAOImpl";
+
+ URL fileLocation = getFileInClassPath(fqn);
+
+ if (fileLocation != null) {
+
+ // there is already a existing file in class-path, skip
+
+ if (isVerbose()) {
+
+ log.info("Will not generate [" + fqn + "], already found in class-path at location : " + fileLocation);
+ } else {
+ log.info("Will not generate [" + fqn + "], already found in class-path.");
+ }
+ return false;
+ }
+
+ Collection<ObjectModelOperation> moreOperations =
+ extraOperations.get(input.getQualifiedName());
+
+ if (CollectionUtils.isNotEmpty(moreOperations)) {
+
+ // no user operations, can generate it
+ return false;
+ }
+
+ // can safely generate the dao impl
+ return true;
+ }
+
protected void generateDAOClass(ObjectModelClass clazz, String clazzName, String clazzFQN) {
ObjectModelClass daoClass = createClass(clazzName + "DAO", clazz.getPackageName());
setDocumentation(daoClass, "/**\n" +
1
0
r2348 - in trunk/topia-persistence/src/main/java/org/nuiton/topia: generator persistence
by tchemit@users.nuiton.org 03 Oct '11
by tchemit@users.nuiton.org 03 Oct '11
03 Oct '11
Author: tchemit
Date: 2011-10-03 18:34:57 +0200 (Mon, 03 Oct 2011)
New Revision: 2348
Url: http://nuiton.org/repositories/revision/topia/2348
Log:
Evolution #1764: Improve the method TopiaDAOImpl.newInstance()
Evolution #1765: Introduce the TopiaEntityEnum into the generated dao
Modified:
trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java
trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java
trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java
trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java
trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOLegacy.java
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java 2011-09-25 21:42:03 UTC (rev 2347)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/DAOHelperTransformer.java 2011-10-03 16:34:57 UTC (rev 2348)
@@ -68,7 +68,7 @@
String packageName = getOutputProperties().getProperty(PROP_DEFAULT_PACKAGE);
String modelName = model.getName();
String daoHelperClazzName = modelName + "DAOHelper";
- String entityEnumName = modelName+"EntityEnum";
+ String entityEnumName = modelName + "EntityEnum";
List<ObjectModelClass> classes = TopiaGeneratorUtil.getEntityClasses(model, true);
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2011-09-25 21:42:03 UTC (rev 2347)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/generator/EntityDAOTransformer.java 2011-10-03 16:34:57 UTC (rev 2348)
@@ -51,7 +51,6 @@
import java.security.Permission;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -94,6 +93,9 @@
*/
protected Class<?> daoImplementation;
+ protected String entityEnumName;
+
+ protected String entityEnumPackage;
/**
* Map of extra operations for DAO. The key of the map is the qualified
* name of the entity relative to the DAO.
@@ -104,6 +106,22 @@
@Override
public void transformFromModel(ObjectModel model) {
+ boolean generateStandaloneEnum =
+ TopiaGeneratorUtil.shouldGenerateStandaloneEnumForDAOHelper(model);
+ String modelName = model.getName();
+
+ entityEnumName = modelName + "EntityEnum";
+
+ String packageName =
+ getOutputProperties().getProperty(PROP_DEFAULT_PACKAGE);
+
+ if (generateStandaloneEnum) {
+ entityEnumPackage = packageName+"."+entityEnumName;
+ } else {
+ String daoHelperClazzName = modelName + "DAOHelper";
+ entityEnumPackage = packageName + "." + daoHelperClazzName + "." + entityEnumName;
+ }
+
usages = TopiaGeneratorUtil.searchDirectUsages(model);
boolean extendLegacyDAO =
Boolean.valueOf(model.getTagValue(TopiaTagValues.TAG_USE_LEGACY_DAO));
@@ -275,7 +293,7 @@
}
setSuperClass(daoAbstractClass, extendClass);
- addInterface(daoAbstractClass, TopiaDAO.class.getName() + "<E>");
+// addInterface(daoAbstractClass, TopiaDAO.class.getName() + "<E>");
String prefix = getConstantPrefix(clazz, "");
setConstantPrefix(prefix);
@@ -292,13 +310,14 @@
addImport(daoAbstractClass, Set.class);
}
addImport(daoAbstractClass, List.class);
- addImport(daoAbstractClass, Arrays.class);
+// addImport(daoAbstractClass, Arrays.class);
addImport(daoAbstractClass, TopiaException.class);
- addImport(daoAbstractClass, TopiaContextImplementor.class);
+// addImport(daoAbstractClass, TopiaContextImplementor.class);
boolean enableSecurity = TopiaGeneratorUtil.isClassWithSecurity(clazz);
if (enableSecurity) {
+ addImport(daoAbstractClass, TopiaContextImplementor.class);
addImport(daoAbstractClass, ArrayList.class);
addImport(daoAbstractClass, Permission.class);
addImport(daoAbstractClass, "org.nuiton.topia.taas.entities.TaasAuthorizationImpl");
@@ -321,12 +340,26 @@
"getEntityClass",
"Class<E>",
ObjectModelModifier.PUBLIC);
+ addAnnotation(daoAbstractClass, op,Override.class.getSimpleName());
setOperationBody(op, ""
/*{
return (Class<E>)<%=clazzName%>.class;
}*/
);
+ // getTopiaEntityEnum
+ addImport(daoAbstractClass, entityEnumPackage);
+ op = addOperation(daoAbstractClass,
+ "getTopiaEntityEnum",
+ entityEnumName,
+ ObjectModelModifier.PUBLIC);
+ addAnnotation(daoAbstractClass, op,Override.class.getSimpleName());
+ setOperationBody(op, ""
+/*{
+ return <%=entityEnumName%>.<%=clazzName%>;
+ }*/
+ );
+
generateDAOOperations(daoAbstractClass, DAOoperations);
generateDelete(clazz, daoAbstractClass);
@@ -458,6 +491,7 @@
ObjectModelClass result) {
ObjectModelOperation op;
op = addOperation(result, "delete", "void", ObjectModelModifier.PUBLIC);
+ addAnnotation(result, op,Override.class.getSimpleName());
addException(op, TopiaException.class);
addParameter(op, "E", "entity");
StringBuilder body = new StringBuilder();
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java 2011-09-25 21:42:03 UTC (rev 2347)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAO.java 2011-10-03 16:34:57 UTC (rev 2348)
@@ -69,6 +69,8 @@
*/
public interface TopiaDAO<E extends TopiaEntity> {
+ TopiaEntityEnum getTopiaEntityEnum();
+
/**
* When TopiaContextImpl create the TopiaDAOHibernate, it must call this
* method just after.
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2011-09-25 21:42:03 UTC (rev 2347)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOImpl.java 2011-10-03 16:34:57 UTC (rev 2348)
@@ -81,6 +81,12 @@
protected TopiaContextImplementor context;
@Override
+ public TopiaEntityEnum getTopiaEntityEnum() {
+ throw new UnsupportedOperationException(
+ "This method must be overided in generated DAO");
+ }
+
+ @Override
public Class<E> getEntityClass() {
throw new UnsupportedOperationException(
"This method must be overided in generated DAO");
@@ -149,80 +155,22 @@
@SuppressWarnings("unchecked")
@Override
public E newInstance() throws TopiaException {
- E result = null;
if (log.isDebugEnabled()) {
log.debug("entityClass = " + entityClass);
}
- String classname = entityClass.getName();
- try {
- // on commence par essayer d'instancier le Impl
- result = ((Class<E>) Class.forName(classname + "Impl"))
- .newInstance();
- if (log.isDebugEnabled()) {
- log.debug("Utilisation de la classe " + classname + "Impl"
- + " pour " + classname);
- }
- } catch (ClassNotFoundException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Impossible de trouver la classe " + classname
- + "Impl");
- }
- if (log.isDebugEnabled()) {
- log.debug("StackTrace", eee);
- }
- } catch (Exception eee) {
- if (log.isWarnEnabled()) {
- log.warn("Impossible d'instancier " + classname + "Impl");
- }
- if (log.isDebugEnabled()) {
- log.debug("StackTrace", eee);
- }
- }
+ Class<E> implementation = (Class<E>)
+ getTopiaEntityEnum().getImplementation();
- if (result == null) {
- // le impl n'est pas trouvé on essai avec la classe elle meme
- try {
- result = entityClass.getConstructor().newInstance();
- if (log.isDebugEnabled()) {
- log.debug("Utilisation de la classe " + classname
- + " pour " + classname);
- }
- } catch (Exception eee) {
- if (log.isWarnEnabled()) {
- log.warn("Impossible d'instancier " + classname);
- }
- if (log.isDebugEnabled()) {
- log.debug("StackTrace", eee);
- }
- }
- }
-
- if (result == null) {
+ try {
+ E result = implementation.newInstance();
+ return result;
+ } catch (Exception e) {
throw new TopiaException(
"Impossible de trouver ou d'instancier la classe "
- + classname);
+ + implementation);
}
-
- return result;
}
- /**
- * private method because this is hibernate specific method and we don't
- * want expose it
- *
- * @return the meta-data of the entity
- * @throws TopiaException if any pb
- */
- private ClassMetadata getClassMetadata() throws TopiaException {
- ClassMetadata meta = getContext().getHibernateFactory()
- .getClassMetadata(entityClass);
- if (meta == null) {
- meta = getContext().getHibernateFactory().getClassMetadata(
- entityClass.getName() + "Impl");
- }
- return meta;
- }
-
@Override
public <U extends TopiaEntity> List<U> findUsages(Class<U> type, E e)
throws TopiaException {
@@ -263,16 +211,6 @@
getContext().removeTopiaEntityVetoable(entityClass, vetoable);
}
- /**
- * Renvoie la Session contenue dans le contexte
- *
- * @return hibernate session
- * @throws TopiaException if any pb
- */
- private Session getSession() throws TopiaException {
- return getContext().getHibernate();
- }
-
@Override
public E create(E entity) throws TopiaException {
@@ -645,5 +583,31 @@
}
+ /**
+ * Renvoie la Session contenue dans le contexte
+ *
+ * @return hibernate session
+ * @throws TopiaException if any pb
+ */
+ Session getSession() throws TopiaException {
+ return getContext().getHibernate();
+ }
+ /**
+ * package locale method because this is hibernate specific method and
+ * we don't want expose it.
+ *
+ * @return the meta-data of the entity
+ * @throws TopiaException if any pb
+ */
+ ClassMetadata getClassMetadata() throws TopiaException {
+ ClassMetadata meta = getContext().getHibernateFactory()
+ .getClassMetadata(entityClass);
+ if (meta == null) {
+ meta = getContext().getHibernateFactory().getClassMetadata(
+ getTopiaEntityEnum().getImplementationFQN());
+ }
+ return meta;
+ }
+
} //TopiaDAOImpl
Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOLegacy.java
===================================================================
--- trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOLegacy.java 2011-09-25 21:42:03 UTC (rev 2347)
+++ trunk/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDAOLegacy.java 2011-10-03 16:34:57 UTC (rev 2348)
@@ -49,32 +49,21 @@
import org.hibernate.Criteria;
import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
-import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.hibernate.metadata.ClassMetadata;
import org.nuiton.topia.TopiaException;
-import org.nuiton.topia.event.TopiaEntityListener;
-import org.nuiton.topia.event.TopiaEntityVetoable;
-import org.nuiton.topia.framework.TopiaContextImplementor;
-import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
-import java.security.Permission;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
- * Cette classe permet d'avoir un ensemble de méthode implantée de façon
- * standard et plus spécifiquement pour Hibernate.
- *
- * Certains accès à Hibernate sont tout de même fait ici, car on a pris le
- * choix de se baser entièrement sur hibernate pour la persistence, et il
- * est ainsi possible d'accèder au meta information hibernate sur les classes
- * lorque l'on en a besoin.
- *
+ * Surcharge du {@link TopiaDAOImpl} pour utiliser l'api criteria au lieu du hql
+ * pour tout ce qui est requétage.
+ *
* Created: 31 déc. 2005 13:10:34
*
* @param <E> le type de l'entite
@@ -82,148 +71,14 @@
* @author tchemit <chemit(a)codelutin.com>
*/
-public class TopiaDAOLegacy<E extends TopiaEntity> extends TopiaDAOImpl<E> { // TopiaDAOImpl
+public class TopiaDAOLegacy<E extends TopiaEntity> extends TopiaDAOImpl<E> { // TopiaDAOLegacy
/** Logger. */
- private static Log log = LogFactory.getLog(TopiaDAOImpl.class);
+ private static Log log = LogFactory.getLog(TopiaDAOLegacy.class);
- protected Class<E> entityClass;
-
- protected TopiaContextImplementor context;
-
- @Override
- public Class<E> getEntityClass() {
- throw new UnsupportedOperationException(
- "This method must be overided in generated DAO");
- }
-
- /**
- * Retourne l'id de l'entity
- * @param e l'entity
- * @return l'id de l'entity ou null si pas trouvé
- * @throws TopiaException Si une erreur survient durant la recherche
- */
- protected Serializable getId(E e) throws TopiaException {
- ClassMetadata meta = getClassMetadata();
- String idPropName = meta.getIdentifierPropertyName();
-
- Serializable result;
- try {
- result = (Serializable) PropertyUtils.getSimpleProperty(e,
- idPropName);
- } catch (Exception eee) {
- throw new TopiaException("Impossible de récuperer l'identifiant "
- + idPropName + " de l'entite: " + e);
- }
- return result;
- }
-
- /**
- * Retourne l'id de l'entity representer comme une map
- * @param map l'entity en representation map
- * @return l'id de l'entity ou null si pas trouvé
- * @throws TopiaException Si une erreur survient durant la recherche
- */
- protected Serializable getId(Map map) throws TopiaException {
- try {
- ClassMetadata meta = getClassMetadata();
- String idPropName = meta.getIdentifierPropertyName();
-
- Serializable id = (Serializable) map.get(idPropName);
- return id;
- } catch (HibernateException eee) {
- throw new TopiaException(eee);
- }
- }
-
- /**
- * When TopiaContextImpl create the TopiaDAOHibernate, it must call this method just
- * after
- *
- * @param entityClass
- */
- public void init(TopiaContextImplementor context, Class<E> entityClass)
- throws TopiaException {
- log.debug("init dao for " + entityClass.getName());
- this.context = context;
- this.entityClass = entityClass;
- }
-
- @Override
- public TopiaContextImplementor getContext() {
- return context;
- }
-
@SuppressWarnings("unchecked")
protected E instanciateNew() throws TopiaException {
- E result = null;
- if (log.isDebugEnabled()) {
- log.debug("entityClass = " + entityClass);
- }
- String classname = entityClass.getName();
- try {
- // on commence par essayer d'instancier le Impl
- result = ((Class<E>) Class.forName(classname + "Impl"))
- .newInstance();
- if (log.isDebugEnabled()) {
- log.debug("Utilisation de la classe " + classname + "Impl"
- + " pour " + classname);
- }
- } catch (InstantiationException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Impossible d'instancier " + classname + "Impl");
- }
- if (log.isDebugEnabled()) {
- log.debug("StackTrace", eee);
- }
- } catch (IllegalAccessException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Impossible d'instancier " + classname + "Impl");
- }
- if (log.isDebugEnabled()) {
- log.debug("StackTrace", eee);
- }
- } catch (ClassNotFoundException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Impossible de trouver la classe " + classname
- + "Impl");
- }
- if (log.isDebugEnabled()) {
- log.debug("StackTrace", eee);
- }
- }
-
- if (result == null) {
- // le impl n'est pas trouvé on essai avec la classe elle meme
- try {
- result = entityClass.newInstance();
- if (log.isDebugEnabled()) {
- log.debug("Utilisation de la classe " + classname
- + " pour " + classname);
- }
- } catch (InstantiationException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Impossible d'instancier " + classname);
- }
- if (log.isDebugEnabled()) {
- log.debug("StackTrace", eee);
- }
- } catch (IllegalAccessException eee) {
- if (log.isWarnEnabled()) {
- log.warn("Impossible d'instancier " + classname);
- }
- if (log.isDebugEnabled()) {
- log.debug("StackTrace", eee);
- }
- }
- }
-
- if (result == null) {
- throw new TopiaException(
- "Impossible de trouver ou d'instancier la classe "
- + classname);
- }
-
+ E result = newInstance();
return result;
}
@@ -272,23 +127,6 @@
}
- /**
- * private method because this is hibernate specific method and we don't
- * want expose it
- *
- * @return the meta-data of the entity
- * @throws TopiaException if any pb
- */
- private ClassMetadata getClassMetadata() throws TopiaException {
- ClassMetadata meta = getContext().getHibernateFactory()
- .getClassMetadata(entityClass);
- if (meta == null) {
- meta = getContext().getHibernateFactory().getClassMetadata(
- entityClass.getName() + "Impl");
- }
- return meta;
- }
-
@Override
public E findByPrimaryKey(Object... k) throws TopiaException {
// TODO pour une meilleur gestion des problemes a la compilation
@@ -588,26 +426,6 @@
return Restrictions.or(crit1, crit2);
}
- @Override
- public void addTopiaEntityListener(TopiaEntityListener listener) {
- getContext().addTopiaEntityListener(entityClass,listener);
- }
-
- @Override
- public void addTopiaEntityVetoable(TopiaEntityVetoable vetoable) {
- getContext().addTopiaEntityVetoable(entityClass,vetoable);
- }
-
- @Override
- public void removeTopiaEntityListener(TopiaEntityListener listener) {
- getContext().removeTopiaEntityListener(entityClass, listener);
- }
-
- @Override
- public void removeTopiaEntityVetoable(TopiaEntityVetoable vetoable) {
- getContext().removeTopiaEntityVetoable(entityClass, vetoable);
- }
-
/**
* Cette methode appelle fireVetoableCreate et fireOnCreated
* Si vous la surchargé, faites attention a appeler le super
@@ -652,27 +470,6 @@
}
@Override
- public E update(E e) throws TopiaException {
- try {
- getSession().saveOrUpdate(e);
- getContext().getFiresSupport().warnOnUpdateEntity(e);
- return e;
- } catch (HibernateException eee) {
- throw new TopiaException(eee);
- }
- }
-
- @Override
- public void delete(E e) throws TopiaException {
- try {
- getSession().delete(e);
- getContext().getFiresSupport().warnOnDeleteEntity(e);
- } catch (HibernateException eee) {
- throw new TopiaException(eee);
- }
- }
-
- @Override
public E findByTopiaId(String k) throws TopiaException {
return query(Restrictions.idEq(k));
}
@@ -692,7 +489,8 @@
@Override
public List<String> findAllIds() throws TopiaException {
- List<String> find = context.find("select src.topiaId from " + entityClass.getSimpleName() + "Impl src");
+// List<String> find = context.find("select src.topiaId from " + entityClass.getSimpleName() + "Impl src");
+ List<String> find = context.find("select src.topiaId from " + getEntityClass() + " src");
return find;
}
@@ -824,20 +622,4 @@
return criteria;
}
- /**
- * Renvoie la Session contenue dans le contexte
- * @return hibernate session
- * @throws TopiaException if any pb
- */
- private Session getSession() throws TopiaException {
- return getContext().getHibernate();
- }
-
- @Override
- public List<Permission> getRequestPermission(String topiaId, int actions)
- throws TopiaException {
- return null;
- }
-
-
-} //TopiaDAOImpl
+} //TopiaDAOLegacy
1
0