title says it all, I'm working on a JPA2 (through Hibernate 4.0) based data layer that needs to be database agnostic, and I'm trying to retreive whether a column of a table (associated with an @Entity) is nullable, what the type is, and most importantly, if it's a varchar, how long it is.
JPA2 get column metadata (type, lenth, nullable, etc)
140 Views Asked by zacaj At
1
There are 1 best solutions below
Related Questions in HIBERNATE
- SQL schema for a fill-in-the-blank exercise
- Hibernate: JOIN inheritance question - why the need for two left joins
- Hibernate ClobJdbcType bindings: what are the diferences?
- Hibernate SQL Error: Missing FROM-clause entry for table "th1_1"
- springboot class org.hibernate.mapping.Bag cannot be cast to class org.hibernate.mapping.SimpleValue
- Is there a way to fetch Associated Entity from second level Cache instead of hitting the DB in Hibernate?
- Hibernate manage transaction on standalone application
- JPA Hibernate OneToOne Mapping
- Design patterns - How Design patterns work with bulk data
- Problem While Fetching the Entity data and its related Entity data with JPA(Lazy Initialization Exception)
- Why does Hibernate execute two SELECT queries instead of one when using @ManyToOne(fetch = FetchType.EAGER)
- How to configure connection pool c3p0 hibernate most efficiently for remote connection mySql
- Problem with inserting objects into database that have composite ids
- Suggest best design patterns to update or insert bulk data
- Failed to create bean entityManagerFactory due Java heap out of memory in spring boot 3 hibernate 6
Related Questions in JPA-2.0
- Upgrading from Hibernate 4.x to 5.x producing SQLException Invalid Column Index
- Cannot create a table in H2 with a custom enum
- JPA criteria select multiple fields from subquery
- Spring boot 3, javax.persistence and entity scan
- Issue with Jpa and inheritance
- Joining pageable tables without relation using JPA criteria
- JPA ElementCollection foreign key mapping error
- JPA [EcliseLink]: Cannot change the type of an instance of parent A to subclass B In the single table inheritance
- SpringBoot JPA in MySQL
- In JPA2 and Java 10, how do I map the value of an enum to an @Enumerated column?
- can do this with JPA / Hibernate criteriabuilder
- JPA Criteria Subquery with select multiple colums and max() function
- How to properly / efficiently manage entity manager JPA Spring @Transactional for large datasets?
- Build a jpa specification query without retriving child entity data
- findAll() in spring boot
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
You can create a database agnostic model, with JPA @Entity's, meaning that your model will work using different DB.
Usually you code your @Entity, an generate the right DDL using SchemaGenerator tool (or other tool) that will create the proper statements for a specific database (using the specified dialect). Your schema is DB agnostic, but at runtime, the proper dialect must be specified.
Be aware that certain key generation mechanism aren't available to some DB and should be avoided to be truly DB agnostic.
Using the @Column annotation on a field, you can define nullable, length etc. If you use the "datatype" property, its becomes your responsibility to use a cross DB type if you want to remain DB agnostic.
There are also other @Temporal & @Enumarated that can influence generated data types.
-- Alternative
You can also map existing table to entities. There are also tools that will do it. By example : http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jpt.doc.user%2Ftasks021.htm
Be aware to you might have to tweak your mapping / model a bit to be truly database agnostic, as the generated @Entity's mapping may reflect some database specific data types that were used to create the model in the first place.
To my knowledge, generally speaking, JPA is DB agnostic by itself, unless you force datatypes or use unsupported key generation mechanism. It is the right framework to create DB agnostic models.
Even if it may be possible, i don't believe JPA is the right tool to inspect DB types are runtime. So if by "retrieve" you mean inspect and adapt at runtime... you might be better of using straight JDBC. If you need to inspect DB at runtime and react accordingly, it is the opposite of DB agnostic code, you treat all possible cases.