manytomanyfield.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,189 行 · 第 1/3 页
JAVA
1,189 行
out.println("if (" + var + " != null) {"); out.pushDepth(); out.println("if (__caucho_state.isPersist()) {"); out.pushDepth(); out.println(var + ".setSession(__caucho_session);"); out.println("return " + var + ";"); out.popDepth(); out.println("}"); out.println(); // jpa/1622 out.println("if (" + var + ".getSession() != null"); out.println(" && " + var + ".getSession() == __caucho_session)"); out.println(" return " + var + ";"); out.popDepth(); out.println("}"); out.println(); out.println("com.caucho.amber.AmberQuery query = null;"); out.println(); out.println("try {"); out.pushDepth(); out.println("if (__caucho_session == null) {"); out.pushDepth(); String newEmptyCollection = "new " + collectionImpl; if (param != null) { newEmptyCollection += "<" + param.getPrintName(); if (isMap) { newEmptyCollection += ", "; newEmptyCollection += param2.getPrintName(); } newEmptyCollection += ">"; } newEmptyCollection += "(query"; if (isMap) { newEmptyCollection += "," + getTargetType().getBeanClass().getName(); newEmptyCollection += ".class.getDeclaredMethod(\"get"; String getterMapKey = getMapKey(); getterMapKey = Character.toUpperCase(getterMapKey.charAt(0)) + getterMapKey.substring(1); newEmptyCollection += getterMapKey; // "getId"); newEmptyCollection += "\", (Class []) null)"; } newEmptyCollection += ")"; // jpa/0s2k, jpa/1622 out.println("if (" + var + " == null)"); out.println(" " + var + " = " + newEmptyCollection + ";"); // if (! isAbstract()) out.println(); out.println("return " + var + ";"); out.popDepth(); out.println("}"); out.println(); out.print("String sql=\""); out.print("SELECT c"); out.print(" FROM " + getSourceType().getName() + " o,"); out.print(" IN(o." + getName() + ") c"); out.print(" WHERE "); out.print(getRelatedType().getId().generateRawWhere("o")); if (_orderByFields != null) { out.print(" ORDER BY "); for (int i = 0; i < _orderByFields.size(); i++) { if (i != 0) out.print(", "); out.print("c." + _orderByFields.get(i)); if (Boolean.FALSE.equals(_orderByAscending.get(i))) out.print(" DESC"); } } out.println("\";"); out.println("query = __caucho_session.prepareQuery(sql);"); out.println("int index = 1;"); getRelatedType().getId().generateSet(out, "query", "index", "this"); // Ex: _caucho_getChildren = new com.caucho.amber.collection.CollectionImpl out.print(var); out.print(" = " + newEmptyCollection + ";"); /* out.pushDepth(); generateAdd(out); generateRemove(out); generateClear(out); // generateSize(out); out.popDepth(); out.println("};"); */ out.println(); // jpa/0i5g out.print(var + "_added = "); out.println("new java.util.HashSet<" + getTargetType().getBeanClass().getName() + ">();"); if (isMap) out.print(var + "_added.addAll(" + var + ".values());"); else out.println(var + "_added.addAll(" + var + ");"); out.println(); out.println("return " + var + ";"); out.popDepth(); out.println("} catch (Exception e) {"); out.println(" throw com.caucho.amber.AmberRuntimeException.create(e);"); out.println("}"); out.popDepth(); out.println("}"); generateAmberAdd(out); generateAmberRemove(out); generateAmberRemoveTargetAll(out); } /** * Generates the set property. */ private void generateAdd(JavaWriter out) throws IOException { JType type = getJavaType(); JType []paramArgs = type.getActualTypeArguments(); String gType = paramArgs.length > 0 ? paramArgs[0].getPrintName() : "Object"; out.println("public boolean add(" + gType + " o)"); out.println("{"); out.pushDepth(); String ownerType = getRelatedType().getInstanceClassName(); out.println("if (! (o instanceof " + ownerType + "))"); out.println(" throw new java.lang.IllegalArgumentException((o == null ? \"null\" : o.getClass().getName()) + \" must be a " + ownerType + "\");"); out.println(ownerType + " bean = (" + ownerType + ") o;"); // XXX: makePersistent /* ArrayList<Column> keyColumns = getKeyColumns(); for (int i = 0; i < keyColumns.size(); i++) { Column column = keyColumns.get(i); AbstractProperty prop = column.getProperty(); if (prop != null) { out.println("bean." + prop.getSetterName() + "(" + ownerType + "__ResinExt.this);"); } } */ out.println("return true;"); out.popDepth(); out.println("}"); } /** * Generates the set property. */ private void generateRemove(JavaWriter out) throws IOException { JType type = getJavaType(); JType []paramArgs = type.getActualTypeArguments(); String gType = paramArgs.length > 0 ? paramArgs[0].getPrintName() : "Object"; out.println("public boolean remove(" + gType + " o)"); out.println("{"); out.pushDepth(); String ownerType = getSourceType().getInstanceClassName(); out.println("if (! (o instanceof " + ownerType + "))"); out.println(" throw new java.lang.IllegalArgumentException((o == null ? \"null\" : o.getClass().getName()) + \" must be a " + ownerType + "\");"); out.println(ownerType + " bean = (" + ownerType + ") o;"); // XXX: makePersistent /* ArrayList<Column> keyColumns = getKeyColumns(); for (int i = 0; i < keyColumns.size(); i++) { Column column = keyColumns.get(i); AbstractProperty prop = column.getProperty(); if (prop != null) { out.println("bean." + prop.getSetterName() + "(null);"); } } */ out.println("return true;"); out.popDepth(); out.println("}"); } /** * Generates the clear method. */ private void generateClear(JavaWriter out) throws IOException { out.println("public void clear()"); out.println("{"); out.pushDepth(); out.println("if (__caucho_session != null) {"); out.pushDepth(); out.println("try {"); out.pushDepth(); out.println("__caucho_session.flushNoChecks();"); out.print("String sql=\""); out.print("UPDATE "); out.print(getSourceType().getName()); out.print(" SET "); /* ArrayList<Column> columns = getKeyColumns(); for (int i = 0; i < columns.size(); i++) { if (i != 0) out.print(", "); out.print(columns.get(i).getName()); out.print("=null"); } */ out.print(" WHERE "); /* for (int i = 0; i < columns.size(); i++) { if (i != 0) out.print(" and "); out.print(columns.get(i).getName()); out.print("=?"); } */ out.println("\";"); out.println("com.caucho.amber.AmberQuery query;"); out.println("query = __caucho_session.prepareQuery(sql);"); String ownerType = getSourceType().getInstanceClassName(); out.println("int index = 1;"); getRelatedType().getId().generateSet(out, "query", "index", ownerType + ".this"); out.println("query.executeUpdate();"); out.println("super.clear();"); out.popDepth(); out.println("} catch (java.sql.SQLException e) {"); out.println(" throw com.caucho.amber.AmberRuntimeException.create(e);"); out.println("}"); out.popDepth(); out.println("} else {"); out.println(" super.clear();"); out.println("}"); out.popDepth(); out.println("}"); } /** * Generates the size method. */ private void generateSize(JavaWriter out) throws IOException { out.println("public int size()"); out.println("{"); out.pushDepth(); out.println("if (__caucho_session == null || isValid())"); out.println(" return super.size();"); out.println("try {"); out.pushDepth(); out.println("__caucho_session.flushNoChecks();"); out.print("String sql=\""); out.print("SELECT count(*) FROM "); out.print(getSourceType().getName()); out.print(" AS o "); out.print(" WHERE "); /* ArrayList<Column> columns = getKeyColumns(); for (int i = 0; i < columns.size(); i++) { if (i != 0) out.print(" and "); out.print("o." + columns.get(i).getName()); out.print("=?"); } */ out.println("\";"); out.println("com.caucho.amber.AmberQuery query;"); out.println("query = __caucho_session.prepareQuery(sql);"); out.println("int index = 1;"); // ejb/06h0 getRelatedType().getId().generateSet(out, "query", getSourceType().getInstanceClassName() + ".this", "index"); // "__ResinExt.this", "index"); out.println("java.sql.ResultSet rs = query.executeQuery();"); out.println("if (rs.next())"); out.println(" return rs.getInt(1);"); out.println("else"); out.println(" return 0;"); out.popDepth(); out.println("} catch (java.sql.SQLException e) {"); out.println(" throw com.caucho.amber.AmberRuntimeException.create(e);"); out.println("}"); out.popDepth(); out.println("}"); } /** * Generates the (post) cascade operation from * parent to this child. This field will only * be cascaded first if the operation can be * performed with no risk to break FK constraints. */ @Override public void generatePostCascade(JavaWriter out, String aConn, CascadeType cascadeType) throws IOException { if (cascadeType != CascadeType.PERSIST && cascadeType != CascadeType.REMOVE) return; if (isCascade(cascadeType)) { out.println("if (__caucho_state.ordinal() <= com.caucho.amber.entity.EntityState.P_TRANSACTIONAL.ordinal()) {"); out.pushDepth(); String amberCascade = "__amber_" + getGetterName(); if (cascadeType == CascadeType.PERSIST) amberCascade += "_add"; else amberCascade += "_remove"; String getter = "_caucho_field_" + getGetterName(); // generateSuperGetterMethod(); out.println("if (" + getter + " != null) {"); out.pushDepth(); if (cascadeType == CascadeType.PERSIST) { // XXX: jpa/0i5c // For now, needs to flush the persist() with many-to-many // to avoid breaking FK constraints from join tables. out.println("if (__caucho_state == com.caucho.amber.entity.EntityState.P_PERSISTING)"); out.println(" __caucho_create(__caucho_session, __caucho_home);"); } out.println();
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?