-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes for Yoann's search + 6.0 tracking
- Support for generated values - See `@ProposedGenerated` for proposed change to `@Generated`; without that change, `@Generated` will not work with update-generation; nor does it work on 5.x
- Loading branch information
Showing
56 changed files
with
2,546 additions
and
541 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 32 additions & 0 deletions
32
hibernate-core/src/main/java/org/hibernate/internal/util/MutableBoolean.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/* | ||
* Hibernate, Relational Persistence for Idiomatic Java | ||
* | ||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later | ||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html | ||
*/ | ||
package org.hibernate.internal.util; | ||
|
||
/** | ||
* Support for mutable boolean references, generally used from within | ||
* anon inner classes, lambdas, etc | ||
* | ||
* @author Steve Ebersole | ||
*/ | ||
public class MutableBoolean { | ||
private boolean value; | ||
|
||
public MutableBoolean() { | ||
} | ||
|
||
public MutableBoolean(boolean value) { | ||
this.value = value; | ||
} | ||
|
||
public boolean getValue() { | ||
return value; | ||
} | ||
|
||
public void setValue(boolean value) { | ||
this.value = value; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
52 changes: 52 additions & 0 deletions
52
hibernate-core/src/main/java/org/hibernate/metamodel/mapping/GeneratedValueResolver.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
/* | ||
* Hibernate, Relational Persistence for Idiomatic Java | ||
* | ||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later | ||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html | ||
*/ | ||
package org.hibernate.metamodel.mapping; | ||
|
||
import org.hibernate.Incubating; | ||
import org.hibernate.engine.spi.SharedSessionContractImplementor; | ||
import org.hibernate.metamodel.mapping.internal.NoGeneratedValueResolver; | ||
import org.hibernate.tuple.GenerationTiming; | ||
import org.hibernate.tuple.ValueGeneration; | ||
|
||
/** | ||
* Generalized contract covering an attribute's generation handling | ||
* | ||
* @author Steve Ebersole | ||
*/ | ||
@Incubating | ||
public interface GeneratedValueResolver { | ||
static GeneratedValueResolver from( | ||
ValueGeneration valueGeneration, | ||
GenerationTiming requestedTiming, | ||
int dbSelectionPosition) { | ||
assert requestedTiming != GenerationTiming.NEVER; | ||
|
||
if ( valueGeneration == null || valueGeneration.getGenerationTiming().includes( GenerationTiming.NEVER ) ) { | ||
return NoGeneratedValueResolver.INSTANCE; | ||
} | ||
|
||
if ( requestedTiming == GenerationTiming.ALWAYS && valueGeneration.getGenerationTiming() == GenerationTiming.INSERT ) { | ||
return NoGeneratedValueResolver.INSTANCE; | ||
} | ||
|
||
// todo (6.x) : incorporate `org.hibernate.tuple.InDatabaseValueGenerationStrategy` | ||
// and `org.hibernate.tuple.InMemoryValueGenerationStrategy` from `EntityMetamodel`. | ||
// this requires unification of the read and write (insert/update) aspects of | ||
// value generation which we'll circle back to as we convert write operations to | ||
// use the "runtime mapping" (`org.hibernate.metamodel.mapping`) model | ||
|
||
if ( valueGeneration.getValueGenerator() == null ) { | ||
// in-db generation (column-default, function, etc) | ||
return new InDatabaseGeneratedValueResolver( requestedTiming, dbSelectionPosition ); | ||
} | ||
|
||
return new InMemoryGeneratedValueResolver( valueGeneration.getValueGenerator(), requestedTiming ); | ||
} | ||
|
||
GenerationTiming getGenerationTiming(); | ||
Object resolveGeneratedValue(Object[] row, Object entity, SharedSessionContractImplementor session); | ||
} |
38 changes: 38 additions & 0 deletions
38
...-core/src/main/java/org/hibernate/metamodel/mapping/InDatabaseGeneratedValueResolver.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/* | ||
* Hibernate, Relational Persistence for Idiomatic Java | ||
* | ||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later | ||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html | ||
*/ | ||
package org.hibernate.metamodel.mapping; | ||
|
||
import org.hibernate.Internal; | ||
import org.hibernate.engine.spi.SharedSessionContractImplementor; | ||
import org.hibernate.tuple.GenerationTiming; | ||
|
||
/** | ||
* GeneratedValueResolver impl for in-db generation. It extracts the generated value | ||
* from a array of the ResultSet values | ||
* | ||
* @author Steve Ebersole | ||
*/ | ||
@Internal | ||
public class InDatabaseGeneratedValueResolver implements GeneratedValueResolver { | ||
private final GenerationTiming timing; | ||
private final int resultPosition; | ||
|
||
public InDatabaseGeneratedValueResolver(GenerationTiming timing, int resultPosition) { | ||
this.timing = timing; | ||
this.resultPosition = resultPosition; | ||
} | ||
|
||
@Override | ||
public GenerationTiming getGenerationTiming() { | ||
return timing; | ||
} | ||
|
||
@Override | ||
public Object resolveGeneratedValue(Object[] row, Object entity, SharedSessionContractImplementor session) { | ||
return row[resultPosition]; | ||
} | ||
} |
39 changes: 39 additions & 0 deletions
39
...te-core/src/main/java/org/hibernate/metamodel/mapping/InMemoryGeneratedValueResolver.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/* | ||
* Hibernate, Relational Persistence for Idiomatic Java | ||
* | ||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later | ||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html | ||
*/ | ||
package org.hibernate.metamodel.mapping; | ||
|
||
import org.hibernate.Internal; | ||
import org.hibernate.Session; | ||
import org.hibernate.engine.spi.SharedSessionContractImplementor; | ||
import org.hibernate.tuple.GenerationTiming; | ||
import org.hibernate.tuple.ValueGenerator; | ||
|
||
/** | ||
* GeneratedValueResolver impl for in-memory generation | ||
* | ||
* @author Steve Ebersole | ||
*/ | ||
@Internal | ||
public class InMemoryGeneratedValueResolver implements GeneratedValueResolver { | ||
private final GenerationTiming generationTiming; | ||
private final ValueGenerator valueGenerator; | ||
|
||
public InMemoryGeneratedValueResolver(ValueGenerator valueGenerator, GenerationTiming generationTiming) { | ||
this.valueGenerator = valueGenerator; | ||
this.generationTiming = generationTiming; | ||
} | ||
|
||
@Override | ||
public GenerationTiming getGenerationTiming() { | ||
return generationTiming; | ||
} | ||
|
||
@Override | ||
public Object resolveGeneratedValue(Object[] row, Object entity, SharedSessionContractImplementor session) { | ||
return valueGenerator.generateValue( (Session) session, entity ); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.