@SuppressWarnings({ "rawtypes", "unchecked" })
	protected boolean doRefresh(DBRecord rec) throws IOException {
		rec = getFreshRecord(rec);
		if (rec == null) {
			return false;
		}
		for (DBFieldCodec c : codecs) {
			c.load(this, rec);
		}
		this.record = rec;
		fresh(false);
		return true;
	}
Extension point: Called when the object's fields are populated.

<p>
This provides an opportunity for the object to initialize any non-database-backed fields that
depend on the database-backed fields. Note that its use may indicate a situation better
solved by a custom {@link DBFieldCodec}. If both the database-backed and non-database-backed
fields are used frequently, then a codec may not be indicated. If the database-backed fields
are only used in this method or to encode another frequently-used field, then a codec is
likely better.

<p>
For a new object, the database-backed fields remain at their initial values. They will be
saved after this method returns, so they may be further initialized with custom logic.

<p>
For an object loaded from the database, the database-backed fields are already populated from
the record when this method is called. They are <em>not</em> automatically saved after this
method returns. This method should not further initialize database-backed fields in this
case.

@param created {@code true} when object is being created, or {@code false} when it is being
           loaded.
@throws IOException if further initialization fails.
Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/database/DBAnnotatedObject.java