01: //$Id: FlushMode.java 10468 2006-09-08 12:23:08Z steve.ebersole@jboss.com $
02: package org.hibernate;
03:
04: import java.io.Serializable;
05: import java.util.HashMap;
06: import java.util.Map;
07:
08: /**
09: * Represents a flushing strategy. The flush process synchronizes
10: * database state with session state by detecting state changes
11: * and executing SQL statements.
12: *
13: * @see Session#setFlushMode(FlushMode)
14: * @see Query#setFlushMode(FlushMode)
15: * @see Criteria#setFlushMode(FlushMode)
16: *
17: * @author Gavin King
18: */
19: public final class FlushMode implements Serializable {
20: private static final Map INSTANCES = new HashMap();
21:
22: private final int level;
23: private final String name;
24:
25: private FlushMode(int level, String name) {
26: this .level = level;
27: this .name = name;
28: }
29:
30: public String toString() {
31: return name;
32: }
33:
34: /**
35: * The {@link Session} is never flushed unless {@link Session#flush}
36: * is explicitly called by the application. This mode is very
37: * efficient for read only transactions.
38: *
39: * @deprecated use {@link #MANUAL} instead.
40: */
41: public static final FlushMode NEVER = new FlushMode(0, "NEVER");
42:
43: /**
44: * The {@link Session} is only ever flushed when {@link Session#flush}
45: * is explicitly called by the application. This mode is very
46: * efficient for read only transactions.
47: */
48: public static final FlushMode MANUAL = new FlushMode(0, "MANUAL");
49:
50: /**
51: * The {@link Session} is flushed when {@link Transaction#commit}
52: * is called.
53: */
54: public static final FlushMode COMMIT = new FlushMode(5, "COMMIT");
55:
56: /**
57: * The {@link Session} is sometimes flushed before query execution
58: * in order to ensure that queries never return stale state. This
59: * is the default flush mode.
60: */
61: public static final FlushMode AUTO = new FlushMode(10, "AUTO");
62:
63: /**
64: * The {@link Session} is flushed before every query. This is
65: * almost always unnecessary and inefficient.
66: */
67: public static final FlushMode ALWAYS = new FlushMode(20, "ALWAYS");
68:
69: public boolean lessThan(FlushMode other) {
70: return this .level < other.level;
71: }
72:
73: static {
74: INSTANCES.put(NEVER.name, NEVER);
75: INSTANCES.put(MANUAL.name, MANUAL);
76: INSTANCES.put(AUTO.name, AUTO);
77: INSTANCES.put(ALWAYS.name, ALWAYS);
78: INSTANCES.put(COMMIT.name, COMMIT);
79: }
80:
81: public static boolean isManualFlushMode(FlushMode mode) {
82: return MANUAL.level == mode.level;
83: }
84:
85: private Object readResolve() {
86: return INSTANCES.get(name);
87: }
88:
89: public static FlushMode parse(String name) {
90: return (FlushMode) INSTANCES.get(name);
91: }
92: }
|