obesechicken13
obesechicken13

Reputation: 833

Spring Boot hibernate using different naming convention to session save

Similar to this problem:
ORA-00904: : invalid identifier Issue with Hibernate Dependent objects program

I'm trying to do batch inserts using hibernate. Whenever I try to do a session.save or session.saveOrUpdate, hibernate complains that I have an invalid identifier

Stack output

2015-11-20 14:17:37  ERROR : ORA-00904: "USERATTRID": invalid identifier  

Entity

public class Attribute {
@Id
@GenericGenerator(name = "increment", strategy = "increment")
@GeneratedValue(generator = "increment", strategy = GenerationType.SEQUENCE)
private int USERAttrID;
private long userNumber;
private String attribute;
private String value;
private String description;
private LocalDateTime updatedDate;
private LocalDateTime createdDate;

The database looks like this after hibernate applies its improved naming convention

USER_ATTRID
ATTRIBUTE
USER_NUMBER
DESCRIPTION
VALUE
CREATED_DATE
UPDATED_DATE

If I use repository.save then the code works fine. The crud repository seems to know how to map my entity to the database, but hibernate's session does not.

I see a few solutions here:
1. Use hibernate's default default naming strategy. Tables get named things like USERATTRID. I'm not sure what implications this has other than making columns harder to read.
2. Combine hibernate with crudrepository using the tutorial here http://frightanic.com/software-development/jpa-batch-inserts/
3. Figure out how to get hibernate's session.save to use the improvedNamingConvention mapper. Can anyone help me with this or provide me another suggestion?
4. I guess I can also manually map the columns :/. Ugh this is messy, you now have to manually do all the conversions on dates :/

Upvotes: 1

Views: 496

Answers (2)

obesechicken13
obesechicken13

Reputation: 833

  1. Ends up being more trouble than it's worth as you stop using hibernate jpa's defaults and all the things spring-data provides you out of the box
  2. Stupid. The tutorial doesn't even use crudRepository
  3. Same as 1
  4. Same as 1

Instead I'm banging my head against a wall trying to get a simple batch process to insert

Upvotes: 0

aorticDefiance
aorticDefiance

Reputation: 125

It would be good to know how you are actually getting the session?The most likely cause that comes to mind is that when you using the hibernate session it is actually not built using the same configuration that was used to build the entity manager that CrudRepository uses underneath.

Upvotes: 1

Related Questions