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