I am new to hibernate. What I am trying to do is use @CollectionId
to generate an identifier for my Address class. I have used Collection
interface for
You must choose from one of the Hi/Lo strategy :
To be as close as your tutorial as possible, I would simply change "hilo" to "seqhilo" in your code.
Hilo is not supported anymore, this should work
@GenericGenerator(name="sequence-gen",strategy="sequence")
FYI, MYSQL supports sequence strategy however table name should not contain hyphen '-' (which is name provided in @GenericGenerator(name) could cause DDL exception while creating sequence table in mysql.
If we are using mysql it would be better to use the @GenericGenerator of increment strategy.
increment - This sort of strategy supports by MySql.
@ElementCollection
@JoinTable(name="USER_ADDRESS", joinColumns=@JoinColumn(name="USER_ID"))
@GenericGenerator(name = "increment-gen", strategy = "increment")
@CollectionId(columns = { @Column(name="ADDRESS_ID") }, generator = "increment-gen", type = @Type(type="long"))
private Collection<Address> listOfAddress = new ArrayList<>();
When I have used the sequence strategy with MySql I came across an issue where my ADDRESS_ID is not getting incremented properly.
This is what works for apps on PostgreSQL. Though I have not tested it, it should work for all DBs. Note that increment-gen
is used not sequence.
@ElementCollection
@JoinTable( name = "user_address", joinColumns = @JoinColumn( name = "user_id"))
@GenericGenerator(name="increment-gen",strategy="increment")
@CollectionId( columns = { @Column( name ="address_id") }, generator ="increment-gen", type =@Type( type ="long"))
private Collection<Address> listOfAddresses = new ArrayList<Address>();
I would recommend you to try any of the below 2 solutions and it will fix your issue. it is as per the specification provided in Hibernate 5.2.X.
Source Of Info -https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html
Solution 1 -
@GenericGenerator(name = "product_generator",strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator")
@CollectionId(columns = { @Column(name="ADDRESS_ID") }, generator = "product_generator", type = @Type(type="long"))*
Solution 2 -
*@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "product_generator")
@CollectionId(columns = { @Column(name="ADDRESS_ID") }, generator = "product_generator", type = @Type(type="long"))*
Let me know if it helps you.