|
EclipseLink 2.3.2, build 'v20111125-r10461' API Reference | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.eclipse.persistence.history.HistoryPolicy
public class HistoryPolicy
Purpose:Expresses how historical data is saved on the data store.
This information is used to both maintain a history of all objects modified through TopLink and to enable point in time querying.
If Oracle 9R2 or later Flashback is used this policy is not required, as the preservation of history is automatic.
Descriptors, ManyToManyMappings, DirectCollectionMappings, and DirectMapMappings only can have a history policy, as only they have associated database tables.
Field Summary | |
---|---|
protected ClassDescriptor |
descriptor
|
protected java.util.Vector |
endFields
|
protected java.util.Vector |
historicalTables
|
protected DatabaseMapping |
mapping
|
protected boolean |
shouldHandleWrites
|
protected java.util.Vector |
startFields
|
protected boolean |
usesLocalTime
|
Constructor Summary | |
---|---|
HistoryPolicy()
|
Method Summary | |
---|---|
void |
addEndFieldName(java.lang.String endFieldName)
PUBLIC: |
void |
addHistoryTableName(java.lang.String name)
PUBLIC: Use to specify the names of the mirroring historical tables. |
void |
addHistoryTableName(java.lang.String sourceTableName,
java.lang.String historyTableName)
PUBLIC: Use to specify the names of the mirroring historical tables. |
Expression |
additionalHistoryExpression(org.eclipse.persistence.internal.expressions.ObjectExpression expression)
INTERNAL: Add any temporal querying conditions to this object expression. |
void |
addStartFieldName(java.lang.String startFieldName)
PUBLIC: Sets the name of the start field. |
protected boolean |
checkWastedVersioning(org.eclipse.persistence.internal.sessions.AbstractRecord modifyRow,
org.eclipse.persistence.internal.helper.DatabaseTable table)
INTERNAL: Checks for the case where an object has multiple tables but only some are part of a minimal update. |
java.lang.Object |
clone()
PUBLIC: Performs a sufficiently deep clone. |
java.lang.Object |
getCurrentTime(org.eclipse.persistence.internal.sessions.AbstractSession session)
PUBLIC: Whenever a historical record is logically deleted (updated) or inserted, the end and start fields respectively will be set to this value. |
ClassDescriptor |
getDescriptor()
PUBLIC: Return the descriptor of the policy. |
protected org.eclipse.persistence.internal.helper.DatabaseField |
getEnd()
INTERNAL: |
protected org.eclipse.persistence.internal.helper.DatabaseField |
getEnd(int i)
INTERNAL: |
java.lang.String |
getEndFieldName()
PUBLIC: |
java.util.Vector |
getEndFields()
INTERNAL: |
java.util.Vector |
getHistoricalTables()
INTERNAL: |
java.util.Vector |
getHistoryTableNames()
PUBLIC: |
DatabaseMapping |
getMapping()
PUBLIC: |
long |
getMinimumTimeIncrement(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Return a minimal time increment supported by the platform. |
protected org.eclipse.persistence.internal.helper.DatabaseField |
getStart()
INTERNAL: |
protected org.eclipse.persistence.internal.helper.DatabaseField |
getStart(int i)
INTERNAL: |
java.lang.String |
getStartFieldName()
PUBLIC: Answers the name of the start field. |
java.util.Vector |
getStartFields()
INTERNAL: |
void |
initialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Initialize a HistoryPolicy. |
void |
logicalDelete(ModifyQuery writeQuery,
boolean isUpdate)
INTERNAL: Performs a logical delete (update) on the historical schema. |
void |
logicalDelete(ModifyQuery writeQuery,
boolean isUpdate,
boolean isShallow)
INTERNAL: Performs a logical delete (update) on the historical schema. |
void |
logicalInsert(ObjectLevelModifyQuery writeQuery,
boolean isUpdate)
INTERNAL: Perform a logical insert into the historical schema, creating a new version of an object. |
void |
mappingLogicalDelete(ModifyQuery originalQuery,
org.eclipse.persistence.internal.sessions.AbstractRecord arguments,
org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Performs a logical delete (update) on the historical schema. |
void |
mappingLogicalInsert(DataModifyQuery originalQuery,
org.eclipse.persistence.internal.sessions.AbstractRecord arguments,
org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Performs a logical insert into the historical schema. |
void |
postDelete(ModifyQuery deleteQuery)
INTERNAL: |
void |
postInsert(ObjectLevelModifyQuery writeQuery)
INTERNAL: |
void |
postUpdate(ObjectLevelModifyQuery writeQuery)
INTERNAL: |
void |
postUpdate(ObjectLevelModifyQuery writeQuery,
boolean isShallow)
INTERNAL: |
void |
setDescriptor(ClassDescriptor descriptor)
PUBLIC: |
protected void |
setEndFields(java.util.Vector endFields)
INTERNAL: |
void |
setEndFieldType(java.lang.String fieldName,
java.lang.Class type)
ADVANCED: |
void |
setHistoricalTables(java.util.Vector historicalTables)
INTERNAL: |
void |
setMapping(DatabaseMapping mapping)
INTERNAL: |
void |
setShouldHandleWrites(boolean value)
Sets if TopLink is responsible for writing history. |
void |
setShouldUseDatabaseTime(boolean value)
Sets if the Timestamp used in maintainaing history should be the current time according to the database. |
protected void |
setStartFields(java.util.Vector startFields)
INTERNAL: |
void |
setStartFieldType(java.lang.Class type)
ADVANCED: Sets the type of all start fields. |
boolean |
shouldHandleWrites()
Answers if TopLink is responsible for writing history. |
boolean |
shouldUseDatabaseTime()
Answers if the Timestamp used in maintaining history should be the current time according to the database. |
boolean |
shouldUseLocalTime()
Answers if the Timestamp used in maintaining history should be System.currentTimeMillis(); |
void |
useDatabaseTime()
Answers if the Timestamp used in maintaining history should be the current time according to the database. |
void |
useLocalTime()
Answers if the Timestamp used in maintaining history should be System.currentTimeMillis(); |
protected void |
verifyTableQualifiers(org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform platform)
INTERNAL: Check that the qualifiers on the historical tables are properly set. |
Methods inherited from class java.lang.Object |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected ClassDescriptor descriptor
protected DatabaseMapping mapping
protected java.util.Vector historicalTables
protected java.util.Vector startFields
protected java.util.Vector endFields
protected boolean shouldHandleWrites
protected boolean usesLocalTime
Constructor Detail |
---|
public HistoryPolicy()
Method Detail |
---|
public Expression additionalHistoryExpression(org.eclipse.persistence.internal.expressions.ObjectExpression expression)
public java.lang.Object clone()
clone
in class java.lang.Object
public java.lang.Object getCurrentTime(org.eclipse.persistence.internal.sessions.AbstractSession session)
public long getMinimumTimeIncrement(org.eclipse.persistence.internal.sessions.AbstractSession session)
public ClassDescriptor getDescriptor()
public final java.util.Vector getHistoricalTables()
public java.util.Vector getHistoryTableNames()
public DatabaseMapping getMapping()
protected org.eclipse.persistence.internal.helper.DatabaseField getStart()
protected org.eclipse.persistence.internal.helper.DatabaseField getStart(int i)
public java.lang.String getStartFieldName()
public java.util.Vector getStartFields()
protected org.eclipse.persistence.internal.helper.DatabaseField getEnd()
protected org.eclipse.persistence.internal.helper.DatabaseField getEnd(int i)
public java.lang.String getEndFieldName()
public java.util.Vector getEndFields()
public void setDescriptor(ClassDescriptor descriptor)
public void initialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
public void addHistoryTableName(java.lang.String name)
Assumes that the order in which tables are added with descriptor.addTableName() matches the order in which mirroring historical tables are added with descriptor.addHistoryTableName().
public void addHistoryTableName(java.lang.String sourceTableName, java.lang.String historyTableName)
Explicitly states that sourceTableName
is mirrored by history table
historyTableName
.
The order in which tables are added with descriptor.addTableName()
should still match the order in which mirroring historical tables are
added with descriptor.addMirroringHistoryTableName().
public void setHistoricalTables(java.util.Vector historicalTables)
public void setMapping(DatabaseMapping mapping)
protected void setStartFields(java.util.Vector startFields)
public void addStartFieldName(java.lang.String startFieldName)
By default all tables belonging to a descriptor have the same primary key field names, and so the same start field names also.
However, if startFieldName
is qualified, i.e. of the form
"EMPLOYEE_HIST.EMP_START", then this call will only set the start field
name for a single historical table.
public void setStartFieldType(java.lang.Class type)
protected void setEndFields(java.util.Vector endFields)
public void addEndFieldName(java.lang.String endFieldName)
addStartFieldName(java.lang.String)
public void setEndFieldType(java.lang.String fieldName, java.lang.Class type)
setStartFieldType(java.lang.Class)
public void setShouldHandleWrites(boolean value)
If history is maintained via low level database triggers or application logic a policy is still needed for point in time querying.
If Oracle flashback is used no HistoryPolicy is needed.
Setting this to false lets you use History for many other applications. For instance a table that tracks available flights or hotel deals may benefit from a HistoryPolicy just to simplify temporal querying.
If all hotel discounts have a start and end date, you could query on all discounts available at a certain date.
public boolean shouldHandleWrites()
If history is maintained via low level database triggers or application logic a policy is still usefull for point in time querying.
If Oracle flashback is used no HistoryPolicy is needed.
setShouldHandleWrites(boolean)
public void setShouldUseDatabaseTime(boolean value)
value
- if false uses localTime (default) insteadpublic boolean shouldUseLocalTime()
shouldUseDatabaseTime()
,
useLocalTime()
public boolean shouldUseDatabaseTime()
shouldUseLocalTime()
,
useDatabaseTime()
public void useLocalTime()
useDatabaseTime()
,
shouldUseLocalTime()
public void useDatabaseTime()
useLocalTime()
,
shouldUseDatabaseTime()
protected void verifyTableQualifiers(org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform platform)
A similar method exists on ClassDescriptor.
protected boolean checkWastedVersioning(org.eclipse.persistence.internal.sessions.AbstractRecord modifyRow, org.eclipse.persistence.internal.helper.DatabaseTable table)
public void postDelete(ModifyQuery deleteQuery)
public void postUpdate(ObjectLevelModifyQuery writeQuery)
public void postUpdate(ObjectLevelModifyQuery writeQuery, boolean isShallow)
public void postInsert(ObjectLevelModifyQuery writeQuery)
public void logicalInsert(ObjectLevelModifyQuery writeQuery, boolean isUpdate)
Called by postInsert() and also postUpdate() (which first does a logicalDelete of the previous version).
public void mappingLogicalInsert(DataModifyQuery originalQuery, org.eclipse.persistence.internal.sessions.AbstractRecord arguments, org.eclipse.persistence.internal.sessions.AbstractSession session)
public void logicalDelete(ModifyQuery writeQuery, boolean isUpdate)
public void logicalDelete(ModifyQuery writeQuery, boolean isUpdate, boolean isShallow)
public void mappingLogicalDelete(ModifyQuery originalQuery, org.eclipse.persistence.internal.sessions.AbstractRecord arguments, org.eclipse.persistence.internal.sessions.AbstractSession session)
|
EclipseLink 2.3.2, build 'v20111125-r10461' API Reference | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |