entitytype.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 1,848 行 · 第 1/3 页
JAVA
1,848 行
ArrayList<AmberField> fields = getFields(); for (int i = 0; i < fields.size(); i++) { AmberField field = fields.get(i); field.generateCopyUpdateObject(out, dst, src, updateIndex); } } /** * Checks entity-relationships from an object. */ public void generateDumpRelationships(JavaWriter out, int updateIndex) throws IOException { if (getParentType() != null) // jpa/0ge3 getParentType().generateDumpRelationships(out, updateIndex); ArrayList<AmberField> fields = getFields(); for (int i = 0; i < fields.size(); i++) { AmberField field = fields.get(i); field.generateDumpRelationships(out, updateIndex); } } /** * Generates the select clause for a load. */ public String generateKeyLoadSelect(String id) { String select = getId().generateLoadSelect(id); if (getDiscriminator() != null) { if (select != null && ! select.equals("")) select = select + ", "; select = select + getDiscriminator().getName(); } return select; } /** * Generates the select clause for a load. */ public String generateFullLoadSelect(String id) { CharBuffer cb = CharBuffer.allocate(); String idSelect = getId().generateSelect(id); if (idSelect != null) cb.append(idSelect); String loadSelect = generateLoadSelect(id); if (! idSelect.equals("") && ! loadSelect.equals("")) cb.append(","); cb.append(loadSelect); return cb.close(); } /** * Generates the select clause for a load. */ public String generateLoadSelect(String id) { return generateLoadSelect(getTable(), id); } /** * Generates the select clause for a load. */ public String generateLoadSelect(AmberTable table, String id) { StringBuilder sb = new StringBuilder(); // jpa/0l11 if (getTable() == table && getDiscriminator() != null) { if (id != null) { if (getDiscriminator().getTable() == getTable()) { sb.append(id + "."); sb.append(getDiscriminator().getName()); } else { // jpa/0l4b sb.append("'" + getDiscriminatorValue() + "'"); } } } generateLoadSelect(sb, table, id, 0); if (sb.length() > 0) return sb.toString(); else return null; } /** * Generates the select clause for a load. */ @Override public void generateLoadSelect(StringBuilder sb, AmberTable table, String id, int loadGroup) { if (_parentType != null) _parentType.generateLoadSelect(sb, table, id, loadGroup); super.generateLoadSelect(sb, table, id, loadGroup); } /** * Generates the auto insert sql. */ public String generateAutoCreateSQL(AmberTable table) { return generateCreateSQL(table, true); } /** * Generates the insert sql. */ public String generateCreateSQL(AmberTable table) { return generateCreateSQL(table, false); } /** * Generates the insert sql. */ private String generateCreateSQL(AmberTable table, boolean isAuto) { CharBuffer sql = new CharBuffer(); sql.append("insert into "); sql.append(JavaWriter.escapeJavaString(table.getName()) + " ("); boolean isFirst = true; ArrayList<String> idColumns = new ArrayList<String>(); for (IdField field : getId().getKeys()) { if (isAuto && field.getGenerator() != null) continue; for (AmberColumn key : field.getColumns()) { String name; if (table == key.getTable()) name = key.getName(); else name = table.getDependentIdLink().getSourceColumn(key).getName(); idColumns.add(name); if (! isFirst) sql.append(", "); isFirst = false; sql.append(name); } } if (table == getTable() && getDiscriminator() != null) { if (! isFirst) sql.append(", "); isFirst = false; sql.append(getDiscriminator().getName()); } ArrayList<String> columns = new ArrayList<String>(); generateInsertColumns(table, columns); for (String columnName : columns) { if (! isFirst) sql.append(", "); isFirst = false; sql.append(columnName); } sql.append(") values ("); isFirst = true; for (int i = 0; i < idColumns.size(); i++) { if (! isFirst) sql.append(", "); isFirst = false; sql.append("?"); } if (table == getTable() && getDiscriminator() != null) { if (! isFirst) sql.append(", "); isFirst = false; sql.append("'" + getDiscriminatorValue() + "'"); } for (int i = 0; i < columns.size(); i++) { if (! isFirst) sql.append(", "); isFirst = false; sql.append("?"); } sql.append(")"); return sql.toString(); } protected void generateInsertColumns(AmberTable table, ArrayList<String> columns) { if (getParentType() != null) getParentType().generateInsertColumns(table, columns); for (AmberField field : getFields()) { if (field.getTable() == table) field.generateInsertColumns(columns); } } /** * Generates the update sql. */ public void generateInsertSet(JavaWriter out, AmberTable table, String pstmt, String query, String obj) throws IOException { if (getParentType() != null) getParentType().generateInsertSet(out, table, pstmt, query, obj); for (AmberField field : getFields()) { if (field.getTable() == table) field.generateInsertSet(out, pstmt, query, obj); } } /** * Generates the select clause for a load. */ public String generateIdSelect(String id) { CharBuffer cb = CharBuffer.allocate(); cb.append(getId().generateSelect(id)); if (getDiscriminator() != null) { cb.append(", "); cb.append(getDiscriminator().getName()); } return cb.close(); } /** * Generates the update sql. */ public void generateUpdateSQLPrefix(CharBuffer sql) { sql.append("update " + getTable().getName() + " set "); } /** * Generates the update sql. * * @param sql the partially built sql * @param group the dirty group * @param mask the group's mask * @param isFirst marks the first set group */ public boolean generateUpdateSQLComponent(CharBuffer sql, int group, long mask, boolean isFirst) { ArrayList<AmberField> fields = getFields(); while (mask != 0) { int i = 0; for (i = 0; (mask & (1L << i)) == 0; i++) { } mask &= ~(1L << i); AmberField field = null; for (int j = 0; j < fields.size(); j++) { field = fields.get(j); if (field.getIndex() == i + group * 64) break; else field = null; } if (field != null) { // jpa/0x00 if (field instanceof VersionField) continue; if (! isFirst) sql.append(", "); isFirst = false; field.generateUpdate(sql); } } // jpa/0x00 for (int j = 0; j < fields.size(); j++) { AmberField field = fields.get(j); if (field instanceof VersionField) { if (! isFirst) sql.append(", "); isFirst = false; field.generateUpdate(sql); break; } } return isFirst; } /** * Generates the update sql. */ public void generateUpdateSQLSuffix(CharBuffer sql) { sql.append(" where "); sql.append(getId().generateMatchArgWhere(null)); // optimistic locking if (_versionField != null) { sql.append(" and "); sql.append(_versionField.generateMatchArgWhere(null)); } } /** * Generates the update sql. */ public String generateUpdateSQL(long mask) { if (mask == 0) return null; CharBuffer sql = CharBuffer.allocate(); sql.append("update " + getTable().getName() + " set "); boolean isFirst = true; ArrayList<AmberField> fields = getFields(); while (mask != 0) { int i = 0; for (i = 0; (mask & (1L << i)) == 0; i++) { } mask &= ~(1L << i); AmberField field = null; for (int j = 0; j < fields.size(); j++) { field = fields.get(j); if (field.getIndex() == i) break; else field = null; } if (field != null) { if (! isFirst) sql.append(", "); isFirst = false; field.generateUpdate(sql); } } if (isFirst) return null; sql.append(" where "); sql.append(getId().generateMatchArgWhere(null)); return sql.toString(); } /** * Generates code after the remove. */ public void generatePreDelete(JavaWriter out) throws IOException { for (AmberField field : getFields()) { field.generatePreDelete(out); } } /** * Generates code after the remove. */ public void generatePostDelete(JavaWriter out) throws IOException { for (AmberField field : getFields()) { field.generatePostDelete(out); } } /** * Deletes by the primary key. */ public void delete(AmberConnection aConn, Object key) throws SQLException { getHome().delete(aConn, key); } /** * Deletes by the primary key. */ public void update(Entity entity) throws SQLException { // aConn.addCompletion(_tableCompletion); } /** * Updates global (persistence unit) entity priorities * for flushing. */ public int updateFlushPriority(ArrayList<EntityType> updatingEntities) { // jpa/0h25, jpa/0h26, jpa/0h29, jpa/0j67 _flushPriority = 0; ArrayList<AmberField> fields = getFields(); for (int i = 0; i < fields.size(); i++) { AmberField field = fields.get(i); if (field instanceof ManyToOneField) { ManyToOneField manyToOne = (ManyToOneField) field; EntityType targetRelatedType = manyToOne.getEntityTargetType(); if (targetRelatedType instanceof EntityType) { EntityType targetType = (EntityType) targetRelatedType; if (! updatingEntities.contains(targetType)) { updatingEntities.add(targetType); targetType.updateFlushPriority(updatingEntities); } int targetPriority = targetType.getFlushPriority(); if (targetPriority >= _flushPriority) { EntityType type = null; // jpa/0j67 if (! manyToOne.isAnnotatedManyToOne()) { for (AmberField targetField : targetType.getFields()) { if (targetField instanceof ManyToOneField) { ManyToOneField targetManyToOne = (ManyToOneField) targetField; type = targetManyToOne.getEntityTargetType(); if (this == type) { if (targetManyToOne.isAnnotatedManyToOne()) { break; } } } } } if (this == type) continue; _flushPriority = targetPriority + 1; } } } } return _flushPriority; } /** * Returns a completion for the given field. */ public AmberCompletion createManyToOneCompletion(String name, Entity source, Object newTarget) { AmberField field = getField(name); EntityType parentType = this; // jpa/0l40 while (field == null) { parentType = parentType.getParentType(); if (parentType == null) break; field = parentType.getField(name); } if (field instanceof ManyToOneField) { ManyToOneField manyToOne = (ManyToOneField) field; return getTable().getInvalidateCompletion(); } else throw new IllegalStateException(); } /** * XXX: temp hack. */ public boolean isEJBProxy(String typeName) { return (getBeanClass() != getProxyClass() && getProxyClass().getName().equals(typeName)); } // // callbacks // /** * Callbacks before an entity is persisted */ public void prePersist(Entity entity) { for (int i = 0; i < _prePersistCallbacks.size(); i++) _prePersistCallbacks.get(i).invoke(entity); } /** * Callbacks after an entity is persisted */ public void postPersist(Entity entity) { for (int i = 0; i < _postPersistCallbacks.size(); i++) _postPersistCallbacks.get(i).invoke(entity); } /** * Callbacks before an entity is updateed */ public void preUpdate(Entity entity) { for (int i = 0; i < _preUpdateCallbacks.size(); i++) _preUpdateCallbacks.get(i).invoke(entity); } /** * Callbacks after an entity is updated */ public void postUpdate(Entity entity) { for (int i = 0; i < _postUpdateCallbacks.size(); i++) _postUpdateCallbacks.get(i).invoke(entity); } /** * Callbacks before an entity is removeed */ public void preRemove(Entity entity) { for (int i = 0; i < _preRemoveCallbacks.size(); i++) _preRemoveCallbacks.get(i).invoke(entity); } /** * Callbacks after an entity is removeed */ public void postRemove(Entity entity) { for (int i = 0; i < _postRemoveCallbacks.size(); i++) _postRemoveCallbacks.get(i).invoke(entity); } /** * Callbacks after an entity is loaded */ public void postLoad(Entity entity) { for (int i = 0; i < _postLoadCallbacks.size(); i++) _postLoadCallbacks.get(i).invoke(entity); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?