manytomanyfield.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,189 行 · 第 1/3 页
JAVA
1,189 行
out.println("for (Object o : " + getter + ") {"); out.pushDepth(); if (cascadeType == CascadeType.PERSIST) { // jpa/0i60 out.println("((com.caucho.amber.entity.Entity) o).__caucho_flush();"); // jpa/1622 out.println(amberCascade + "(aConn, o);"); } else out.println(amberCascade + "(o);"); out.popDepth(); out.println("}"); out.popDepth(); out.println("}"); out.popDepth(); out.println("}"); } } /** * Generates the set property. */ public void generateAmberAdd(JavaWriter out) throws IOException { // commented out: jpa/0s2d // String targetType = getTargetType().getProxyClass().getName(); String targetType = getTargetType().getInstanceClassName(); out.println(); out.println("public boolean" + " __amber_" + getGetterName() + "_add(com.caucho.amber.manager.AmberConnection aConn, Object o)"); out.println("{"); out.pushDepth(); out.println("if (! (o instanceof " + targetType + "))"); out.println(" return false;"); out.println(); out.println(targetType + " v = (" + targetType + ") o;"); // jpa/0i5g String varAdded = "_caucho_field_" + getGetterName() + "_added"; out.println(); out.println("if (" + varAdded + " == null)"); out.println(" " + varAdded + " = new java.util.HashSet<" + getTargetType().getBeanClass().getName() + ">();"); out.println("else if (" + varAdded + ".contains(v))"); out.println(" return false;"); out.println(); out.println(varAdded + ".add(v);"); out.println(); out.println("if (aConn == null)"); out.println(" return false;"); out.println(); out.print("String sql = \"INSERT INTO "); out.print(_associationTable.getName() + " ("); out.print(_sourceLink.generateSelectSQL(null)); out.print(", "); out.print(_targetLink.generateSelectSQL(null)); out.print(") VALUES ("); int count = (getRelatedType().getId().getKeyCount() + getTargetType().getId().getKeyCount()); for (int i = 0; i < count; i++) { if (i != 0) out.print(", "); out.print("?"); } out.println(")\";"); out.println(); out.println("try {"); out.pushDepth(); out.println("java.sql.PreparedStatement pstmt = aConn.prepareInsertStatement(sql, false);"); out.println("int index = 1;"); getRelatedType().getId().generateSet(out, "pstmt", "index", "this"); getTargetType().getId().generateSet(out, "pstmt", "index", "v"); out.println("if (pstmt.executeUpdate() == 1) {"); out.pushDepth(); out.println("aConn.addCompletion(new com.caucho.amber.entity.TableInvalidateCompletion(\"" + _targetLink.getSourceTable().getName() + "\"));"); out.println("return true;"); out.popDepth(); out.println("}"); out.popDepth(); out.println("} catch (Exception e) {"); out.println(" __caucho_log.log(java.util.logging.Level.FINE, e.toString(), e);"); out.println("}"); out.println("return false;"); out.popDepth(); out.println("}"); } /** * Generates the remove property. */ public void generateAmberRemove(JavaWriter out) throws IOException { // commented out: jpa/0s2d // String targetType = getTargetType().getProxyClass().getName(); String targetType = getTargetType().getInstanceClassName(); out.println(); out.println("public boolean" + " __amber_" + getGetterName() + "_remove(Object o)"); out.println("{"); out.pushDepth(); out.println("if (! (o instanceof " + targetType + "))"); out.println(" return false;"); out.println(); out.println(targetType + " v = (" + targetType + ") o;"); out.println(); out.println("if (__caucho_session == null)"); out.println(" return false;"); out.println(); out.print("String sql = \"DELETE FROM "); out.print(_associationTable.getName() + " WHERE "); out.print(_sourceLink.generateMatchArgSQL(null)); out.print(" and "); out.print(_targetLink.generateMatchArgSQL(null)); out.println("\";"); out.println(); out.println("try {"); out.pushDepth(); out.println("java.sql.PreparedStatement pstmt = __caucho_session.prepareStatement(sql);"); out.println("int index = 1;"); getRelatedType().getId().generateSet(out, "pstmt", "index", "this"); getTargetType().getId().generateSet(out, "pstmt", "index", "v"); out.println("if (pstmt.executeUpdate() == 1) {"); out.pushDepth(); out.println("__caucho_session.addCompletion(new com.caucho.amber.entity.TableInvalidateCompletion(\"" + _targetLink.getSourceTable().getName() + "\"));"); out.println("return true;"); out.popDepth(); out.println("}"); out.popDepth(); out.println("} catch (Exception e) {"); out.println(" __caucho_log.log(java.util.logging.Level.FINE, e.toString(), e);"); out.println("}"); out.println("return false;"); out.popDepth(); out.println("}"); } /** * Generates the remove property. */ public void generateAmberRemoveTargetAll(JavaWriter out) throws IOException { // commented out: jpa/0s2d // String targetType = getTargetType().getProxyClass().getName(); String targetType = getTargetType().getInstanceClassName(); out.println(); out.println("public boolean" + " __amber_" + getGetterName() + "_remove_target(Object o)"); out.println("{"); out.pushDepth(); out.println("if (! (o instanceof " + targetType + "))"); out.println(" return false;"); out.println(); out.println(targetType + " v = (" + targetType + ") o;"); out.println(); out.println("if (__caucho_session == null)"); out.println(" return false;"); out.println(); out.print("String sql = \"DELETE FROM "); out.print(_associationTable.getName() + " WHERE "); out.print(_targetLink.generateMatchArgSQL(null)); out.println("\";"); out.println(); out.println("try {"); out.pushDepth(); out.println("java.sql.PreparedStatement pstmt = __caucho_session.prepareStatement(sql);"); out.println("int index = 1;"); getTargetType().getId().generateSet(out, "pstmt", "index", "v"); out.println("if (pstmt.executeUpdate() == 1)"); out.println(" return true;"); out.popDepth(); out.println("} catch (Exception e) {"); out.println(" __caucho_log.log(java.util.logging.Level.FINE, e.toString(), e);"); out.println("}"); out.println("return false;"); out.popDepth(); out.println("}"); } /** * Generates the set property. */ @Override public void generateSetterMethod(JavaWriter out) throws IOException { // commented out: jpa/0s2i // JMethod setter = getSetterMethod(); // // if (setter == null) // return; // // JType type = getGetterMethod().getGenericReturnType(); JType type; ClassLoader loader = getSourceType().getPersistenceUnit().getTempClassLoader(); if (! getSourceType().isFieldAccess()) { type = JTypeWrapper.create(getGetterMethod().getGenericReturnType(), loader); } else { Field field = EntityType.getField(getBeanClass(), getName()); type = JTypeWrapper.create(field.getGenericType(), loader); } out.println(); // commented out: jpa/0s2i // out.print("public void " + setter.getName() + "("); out.print("public void " + getSetterName() + "("); out.println(type.getPrintName() + " value)"); out.println("{"); out.pushDepth(); out.println("if (" + generateSuperGetter("this") + " == value)"); out.println(" return;"); out.println(); // // jpa/0s2j needs to generate the following snippet: // // _caucho___caucho_get_xAnnualReviews // = new com.caucho.amber.collection.CollectionImpl<qa.XAnnualReview>(__caucho_session, null); // _caucho___caucho_get_xAnnualReviews.addAll(0, value); // // // jpa/0s2j: out.println("try {"); out.pushDepth(); String var = "_caucho_field_" + getGetterName(); out.print(var + " = new "); type = getJavaType(); boolean isSet = type.isAssignableTo(Set.class); boolean isMap = false; if (!isSet) { isMap = type.isAssignableTo(Map.class); } JType []paramArgs = type.getActualTypeArguments(); JType param = paramArgs.length > 0 ? paramArgs[0] : null; JType param2 = paramArgs.length > 1 ? paramArgs[1] : null; String collectionImpl; if (isSet) collectionImpl = "com.caucho.amber.collection.SetImpl"; else if (isMap) collectionImpl = "com.caucho.amber.collection.MapImpl"; else collectionImpl = "com.caucho.amber.collection.CollectionImpl"; out.print(collectionImpl); if (param != null) { out.print("<"); out.print(param.getPrintName()); if (isMap) { if (param2 != null) { out.print(", "); out.print(param2.getPrintName()); } } out.print(">"); } out.print("(__caucho_session, null"); if (isMap) { out.print(", "); out.print(getTargetType().getBeanClass().getName()); out.print(".class.getDeclaredMethod(\"get"); String getterMapKey = getMapKey(); getterMapKey = Character.toUpperCase(getterMapKey.charAt(0)) + getterMapKey.substring(1); out.print(getterMapKey); // "getId"); out.print("\")"); } out.println(");"); out.print(var + "."); if (isMap) { out.println("putAll(value);"); } else { out.println("addAll(0, value);"); } out.popDepth(); out.println("} catch(Exception e) {"); out.println(" throw com.caucho.amber.AmberRuntimeException.create(e);"); out.println("}"); out.popDepth(); out.println("}"); } /** * Generates code for foreign entity create/delete */ @Override public void generateInvalidateForeign(JavaWriter out) throws IOException { out.println("if (\"" + _sourceLink.getSourceTable().getName() + "\".equals(table)) {"); out.pushDepth(); generateExpire(out); out.popDepth(); out.println("}"); } /** * Generates code for the object expire */ @Override public void generateExpire(JavaWriter out) throws IOException { String var = "_caucho_field_" + getGetterName(); out.println("if (" + var + " != null)"); out.println(" " + var + ".update();"); } private String generateAccessor(String src, String var) { if (src.equals("super")) return var; else return "((" + getRelatedType().getInstanceClassName() + ") " + src + ")." + var; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?