This week's book giveaways are in the Jython/Python and Object-Oriented programming forums.
We're giving away four copies each of Machine Learning for Business: Using Amazon SageMaker and Jupyter and Object Design Style Guide and have the authors on-line!
See this thread and this one for details.
Win a copy of Machine Learning for Business: Using Amazon SageMaker and JupyterE this week in the Jython/Python forum
or Object Design Style Guide in the Object-Oriented programming forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Bear Bibeault
  • Paul Clapham
  • Jeanne Boyarsky
  • Knute Snortum
Sheriffs:
  • Liutauras Vilda
  • Tim Cooke
  • Junilu Lacar
Saloon Keepers:
  • Ron McLeod
  • Stephan van Hulst
  • Tim Moores
  • Tim Holloway
  • Carey Brown
Bartenders:
  • Joe Ess
  • salvin francis
  • fred rosenberger

Hibernate Mapping problem because no primary key in database

 
Greenhorn
Posts: 7
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I have a table which has no primary key. How to create the hibernate mapping xml without using the generator id
 
Ranch Hand
Posts: 214
IntelliJ IDE Java Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Every relational table has a "natural" primary key. However, it may be unrecognized and undefined. The best solution to your problem then is to determine what the primary key is and define it as such in your RDBMS.

Having said that, it is better to use a surrogate key for the primary key to protect against business semantics changes in the natural key. So why not use a generated id?
 
Bartender
Posts: 10336
Hibernate Eclipse IDE Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Edwin Keeton's suggestion is good. Using a surrogate makes perfect sense; fix the invalid data model so it truly represents relational data.

However, if you cannot change the data model, you can map the entire table as one big composite key. A horrible solution, but a work around which gives you time to fire the DBA who modelled your data this way, and hire a competent replacement.
 
ranger
Posts: 17344
11
Mac IntelliJ IDE Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
"Ehrenfrids"-
Welcome to the JavaRanch! Please adjust your displayed name to meet the

JavaRanch Naming Policy.

You can change it

here.

Thanks! and welcome to the JavaRanch!

Mark
 
Ranch Hand
Posts: 1211
Mac IntelliJ IDE
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

Originally posted by Ehrenfrids:
I have a table which has no primary key. How to create the hibernate mapping xml without using the generator id



How are you accessing records in that table when not using Hibernate? i.e. when you use SQL directly.
 
Ranch Hand
Posts: 37
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Well, when you don't have a primary key and want to access a specific row, I suppose your query will contain all fields, right? So, as weird as it may seem, you could use a composite-key with all fields in it.
 
Leticia Barbalho
Ranch Hand
Posts: 37
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Now, that's for a key not using the generator! For generating a value, you would have to create a field in the DB and use is as your PK.
 
Greenhorn
Posts: 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The problem might not be so simple to adress. Suppose I work with a legacy database and I have a readonly table (imported from a back-office) and I don't want to access individual rows in that table (I want just to list the records obtained form a join).
So: I can't add surogate key (I can't change the database) and I don't have a natural (business) key.
What about that?
 
Paul Sturrock
Bartender
Posts: 10336
Hibernate Eclipse IDE Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

Originally posted by Ionescu Victor:
The problem might not be so simple to adress. Suppose I work with a legacy database and I have a readonly table (imported from a back-office) and I don't want to access individual rows in that table (I want just to list the records obtained form a join).
So: I can't add surogate key (I can't change the database) and I don't have a natural (business) key.
What about that?



See my earlier answer. That's the only work around you have available to you.
 
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Well, I've a legacy database. I don't care to have a IF/Primary key. is there a way? or Hibernate just takes away that option?
 
Gagan Bajpai
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I tried using a big composite key. Hibernate generates a column on MySql.In development, may be I can live with that, but not in production. I'm no expert on Hibernate but this should be easy.
 
Paul Sturrock
Bartender
Posts: 10336
Hibernate Eclipse IDE Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator


I'm no expert on Hibernate but this should be easy


An Object-Relational Mapping tool can only be expected to map relational data. Data without a primary key it is not relational, so it should be no surprise it doesn't work.
 
Greenhorn
Posts: 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
As the table has no primary key, it should not be mapped as an entity.

You could use a named query to insert data instead of declaring an entity, and perform the insert from the dao.


 
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
ORM is to map relations through primary and foreign key to database. If you are not having those on tables then you can use, criteria search with HQL or SQL and populated fetched data into related objects. These objects can be used for further. Example can be found at http://www.deepakgaikwad.net/?p=448
 
Those are the largest trousers in the world! Especially when next to this ad:
Java file APIs (DOC, XLS, PDF, and many more)
https://products.aspose.com/total/java
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!