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 + -
显示快捷键?