Spring boot - save non-id field depending on id field while saving object












2















I have an auto increment id field in spring boot class:



private long id //or it can be int, does not matter


I have also another field, which must be unique and alphanumeric, in same class:



private String code;


This field will have 6 alphanumeric (upper or lower case does not matter).



Is it possible to save this field auto while a new object created for that class, with such a method?



Long.toString("id_field_value",36);


Actually, it gives:



0 -> 0
1 -> 1
10 -> A


So, when first object is created, id will be 1.



Any suggestion?



For example, when i save Person object,



the id will be 1 automatically with JPA - hibarnate.



And also i want another field to be saved automatically, which is depending on id field.



So, id is 1, that string code must be 1 also.



Should i do this after creating object ? Like:



Person person = personRepository.save(person3);
person.setCode(person.getId().toString);//or another functions










share|improve this question

























  • Apart form appearing completely pointless, you need to clarify what it is you want to do.You state this field will have 6 alphanumeric (upper or lower case does not matter) but also when string code must be 1 also. So what is it 1 char or 6 chars. Why do you specify 36 as an arg. What are you expecting that to do?

    – Alan Hay
    Nov 13 '18 at 16:05













  • I need another unique field. It must be alphanumeric. 26 capital letters + 10 numbers make 36 so i thought it will be best. E2E user will see this code on the UI and also we are using that field in some codes @AlanHay

    – asdasasd
    Nov 13 '18 at 16:44
















2















I have an auto increment id field in spring boot class:



private long id //or it can be int, does not matter


I have also another field, which must be unique and alphanumeric, in same class:



private String code;


This field will have 6 alphanumeric (upper or lower case does not matter).



Is it possible to save this field auto while a new object created for that class, with such a method?



Long.toString("id_field_value",36);


Actually, it gives:



0 -> 0
1 -> 1
10 -> A


So, when first object is created, id will be 1.



Any suggestion?



For example, when i save Person object,



the id will be 1 automatically with JPA - hibarnate.



And also i want another field to be saved automatically, which is depending on id field.



So, id is 1, that string code must be 1 also.



Should i do this after creating object ? Like:



Person person = personRepository.save(person3);
person.setCode(person.getId().toString);//or another functions










share|improve this question

























  • Apart form appearing completely pointless, you need to clarify what it is you want to do.You state this field will have 6 alphanumeric (upper or lower case does not matter) but also when string code must be 1 also. So what is it 1 char or 6 chars. Why do you specify 36 as an arg. What are you expecting that to do?

    – Alan Hay
    Nov 13 '18 at 16:05













  • I need another unique field. It must be alphanumeric. 26 capital letters + 10 numbers make 36 so i thought it will be best. E2E user will see this code on the UI and also we are using that field in some codes @AlanHay

    – asdasasd
    Nov 13 '18 at 16:44














2












2








2








I have an auto increment id field in spring boot class:



private long id //or it can be int, does not matter


I have also another field, which must be unique and alphanumeric, in same class:



private String code;


This field will have 6 alphanumeric (upper or lower case does not matter).



Is it possible to save this field auto while a new object created for that class, with such a method?



Long.toString("id_field_value",36);


Actually, it gives:



0 -> 0
1 -> 1
10 -> A


So, when first object is created, id will be 1.



Any suggestion?



For example, when i save Person object,



the id will be 1 automatically with JPA - hibarnate.



And also i want another field to be saved automatically, which is depending on id field.



So, id is 1, that string code must be 1 also.



Should i do this after creating object ? Like:



Person person = personRepository.save(person3);
person.setCode(person.getId().toString);//or another functions










share|improve this question
















I have an auto increment id field in spring boot class:



private long id //or it can be int, does not matter


I have also another field, which must be unique and alphanumeric, in same class:



private String code;


This field will have 6 alphanumeric (upper or lower case does not matter).



Is it possible to save this field auto while a new object created for that class, with such a method?



Long.toString("id_field_value",36);


Actually, it gives:



0 -> 0
1 -> 1
10 -> A


So, when first object is created, id will be 1.



Any suggestion?



For example, when i save Person object,



the id will be 1 automatically with JPA - hibarnate.



And also i want another field to be saved automatically, which is depending on id field.



So, id is 1, that string code must be 1 also.



Should i do this after creating object ? Like:



Person person = personRepository.save(person3);
person.setCode(person.getId().toString);//or another functions







java hibernate jpa






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 13 '18 at 16:06









Alan Hay

15.3k22769




15.3k22769










asked Nov 13 '18 at 14:16









asdasasdasdasasd

237




237













  • Apart form appearing completely pointless, you need to clarify what it is you want to do.You state this field will have 6 alphanumeric (upper or lower case does not matter) but also when string code must be 1 also. So what is it 1 char or 6 chars. Why do you specify 36 as an arg. What are you expecting that to do?

    – Alan Hay
    Nov 13 '18 at 16:05













  • I need another unique field. It must be alphanumeric. 26 capital letters + 10 numbers make 36 so i thought it will be best. E2E user will see this code on the UI and also we are using that field in some codes @AlanHay

    – asdasasd
    Nov 13 '18 at 16:44



















  • Apart form appearing completely pointless, you need to clarify what it is you want to do.You state this field will have 6 alphanumeric (upper or lower case does not matter) but also when string code must be 1 also. So what is it 1 char or 6 chars. Why do you specify 36 as an arg. What are you expecting that to do?

    – Alan Hay
    Nov 13 '18 at 16:05













  • I need another unique field. It must be alphanumeric. 26 capital letters + 10 numbers make 36 so i thought it will be best. E2E user will see this code on the UI and also we are using that field in some codes @AlanHay

    – asdasasd
    Nov 13 '18 at 16:44

















Apart form appearing completely pointless, you need to clarify what it is you want to do.You state this field will have 6 alphanumeric (upper or lower case does not matter) but also when string code must be 1 also. So what is it 1 char or 6 chars. Why do you specify 36 as an arg. What are you expecting that to do?

– Alan Hay
Nov 13 '18 at 16:05







Apart form appearing completely pointless, you need to clarify what it is you want to do.You state this field will have 6 alphanumeric (upper or lower case does not matter) but also when string code must be 1 also. So what is it 1 char or 6 chars. Why do you specify 36 as an arg. What are you expecting that to do?

– Alan Hay
Nov 13 '18 at 16:05















I need another unique field. It must be alphanumeric. 26 capital letters + 10 numbers make 36 so i thought it will be best. E2E user will see this code on the UI and also we are using that field in some codes @AlanHay

– asdasasd
Nov 13 '18 at 16:44





I need another unique field. It must be alphanumeric. 26 capital letters + 10 numbers make 36 so i thought it will be best. E2E user will see this code on the UI and also we are using that field in some codes @AlanHay

– asdasasd
Nov 13 '18 at 16:44












2 Answers
2






active

oldest

votes


















1














You can try @PostPersist annotation. You will have an id in your entity as soon as it is persisted. Something like:



@PostPersist
private void postPersist() {
this.setCode( generateMyCode( getId() ) );
}


This works fine as long as EntityManager is used, the field code should also be persisted to the db.



When using Spring repositories it might be needed to perform extra save() (I do not have to, having just default config) after initial save but you should test this approach with your configuration.



(Spring repositories handle persistence context a bit different way compared to the JPA standard usage with EntityManager.)






share|improve this answer
























  • EntityManager is not default? I tried and this postpersist worked.

    – asdasasd
    Nov 26 '18 at 6:18











  • @asdasasd Default was a bit bad wording. Repository uses em but not in 'default mode' it starts transaction. When you just inject em all changes to managed entities propagate to db without persist() or save(). But with repositories - with default settings - you always need to call save(..). And postPersist() might work differently depending on the settings.

    – pirho
    Nov 26 '18 at 6:46











  • yes, i always use repository.save . So, with postpersist it wont be problem?

    – asdasasd
    Nov 26 '18 at 8:10











  • Should not be a problem. I'm just unable to find documentation & proof about how Spring data actually handles this case.

    – pirho
    Nov 26 '18 at 9:03






  • 1





    @asdasasd You could make method static, inject it if possible to make it bean, or instantiate with new() when yoou need it. But I recommend you to do prepare a separate question considering that it is more helpful then to others also.

    – pirho
    Nov 29 '18 at 6:59



















1














It seems like the code column you want is just exactly the id column but with another encoding (base 36 rather than base 10).



You don't need to store it, nor use a persistence annotation for that :




  • For reading the code : on the entity, just add a getter method getCode() that compute it based on the id value.

  • For searching by code, just convert the code from base 36 to base 10, then search by id.






share|improve this answer
























  • But i need another unique thing to store.

    – asdasasd
    Nov 13 '18 at 14:56











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53283009%2fspring-boot-save-non-id-field-depending-on-id-field-while-saving-object%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














You can try @PostPersist annotation. You will have an id in your entity as soon as it is persisted. Something like:



@PostPersist
private void postPersist() {
this.setCode( generateMyCode( getId() ) );
}


This works fine as long as EntityManager is used, the field code should also be persisted to the db.



When using Spring repositories it might be needed to perform extra save() (I do not have to, having just default config) after initial save but you should test this approach with your configuration.



(Spring repositories handle persistence context a bit different way compared to the JPA standard usage with EntityManager.)






share|improve this answer
























  • EntityManager is not default? I tried and this postpersist worked.

    – asdasasd
    Nov 26 '18 at 6:18











  • @asdasasd Default was a bit bad wording. Repository uses em but not in 'default mode' it starts transaction. When you just inject em all changes to managed entities propagate to db without persist() or save(). But with repositories - with default settings - you always need to call save(..). And postPersist() might work differently depending on the settings.

    – pirho
    Nov 26 '18 at 6:46











  • yes, i always use repository.save . So, with postpersist it wont be problem?

    – asdasasd
    Nov 26 '18 at 8:10











  • Should not be a problem. I'm just unable to find documentation & proof about how Spring data actually handles this case.

    – pirho
    Nov 26 '18 at 9:03






  • 1





    @asdasasd You could make method static, inject it if possible to make it bean, or instantiate with new() when yoou need it. But I recommend you to do prepare a separate question considering that it is more helpful then to others also.

    – pirho
    Nov 29 '18 at 6:59
















1














You can try @PostPersist annotation. You will have an id in your entity as soon as it is persisted. Something like:



@PostPersist
private void postPersist() {
this.setCode( generateMyCode( getId() ) );
}


This works fine as long as EntityManager is used, the field code should also be persisted to the db.



When using Spring repositories it might be needed to perform extra save() (I do not have to, having just default config) after initial save but you should test this approach with your configuration.



(Spring repositories handle persistence context a bit different way compared to the JPA standard usage with EntityManager.)






share|improve this answer
























  • EntityManager is not default? I tried and this postpersist worked.

    – asdasasd
    Nov 26 '18 at 6:18











  • @asdasasd Default was a bit bad wording. Repository uses em but not in 'default mode' it starts transaction. When you just inject em all changes to managed entities propagate to db without persist() or save(). But with repositories - with default settings - you always need to call save(..). And postPersist() might work differently depending on the settings.

    – pirho
    Nov 26 '18 at 6:46











  • yes, i always use repository.save . So, with postpersist it wont be problem?

    – asdasasd
    Nov 26 '18 at 8:10











  • Should not be a problem. I'm just unable to find documentation & proof about how Spring data actually handles this case.

    – pirho
    Nov 26 '18 at 9:03






  • 1





    @asdasasd You could make method static, inject it if possible to make it bean, or instantiate with new() when yoou need it. But I recommend you to do prepare a separate question considering that it is more helpful then to others also.

    – pirho
    Nov 29 '18 at 6:59














1












1








1







You can try @PostPersist annotation. You will have an id in your entity as soon as it is persisted. Something like:



@PostPersist
private void postPersist() {
this.setCode( generateMyCode( getId() ) );
}


This works fine as long as EntityManager is used, the field code should also be persisted to the db.



When using Spring repositories it might be needed to perform extra save() (I do not have to, having just default config) after initial save but you should test this approach with your configuration.



(Spring repositories handle persistence context a bit different way compared to the JPA standard usage with EntityManager.)






share|improve this answer













You can try @PostPersist annotation. You will have an id in your entity as soon as it is persisted. Something like:



@PostPersist
private void postPersist() {
this.setCode( generateMyCode( getId() ) );
}


This works fine as long as EntityManager is used, the field code should also be persisted to the db.



When using Spring repositories it might be needed to perform extra save() (I do not have to, having just default config) after initial save but you should test this approach with your configuration.



(Spring repositories handle persistence context a bit different way compared to the JPA standard usage with EntityManager.)







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 25 '18 at 10:50









pirhopirho

3,905101830




3,905101830













  • EntityManager is not default? I tried and this postpersist worked.

    – asdasasd
    Nov 26 '18 at 6:18











  • @asdasasd Default was a bit bad wording. Repository uses em but not in 'default mode' it starts transaction. When you just inject em all changes to managed entities propagate to db without persist() or save(). But with repositories - with default settings - you always need to call save(..). And postPersist() might work differently depending on the settings.

    – pirho
    Nov 26 '18 at 6:46











  • yes, i always use repository.save . So, with postpersist it wont be problem?

    – asdasasd
    Nov 26 '18 at 8:10











  • Should not be a problem. I'm just unable to find documentation & proof about how Spring data actually handles this case.

    – pirho
    Nov 26 '18 at 9:03






  • 1





    @asdasasd You could make method static, inject it if possible to make it bean, or instantiate with new() when yoou need it. But I recommend you to do prepare a separate question considering that it is more helpful then to others also.

    – pirho
    Nov 29 '18 at 6:59



















  • EntityManager is not default? I tried and this postpersist worked.

    – asdasasd
    Nov 26 '18 at 6:18











  • @asdasasd Default was a bit bad wording. Repository uses em but not in 'default mode' it starts transaction. When you just inject em all changes to managed entities propagate to db without persist() or save(). But with repositories - with default settings - you always need to call save(..). And postPersist() might work differently depending on the settings.

    – pirho
    Nov 26 '18 at 6:46











  • yes, i always use repository.save . So, with postpersist it wont be problem?

    – asdasasd
    Nov 26 '18 at 8:10











  • Should not be a problem. I'm just unable to find documentation & proof about how Spring data actually handles this case.

    – pirho
    Nov 26 '18 at 9:03






  • 1





    @asdasasd You could make method static, inject it if possible to make it bean, or instantiate with new() when yoou need it. But I recommend you to do prepare a separate question considering that it is more helpful then to others also.

    – pirho
    Nov 29 '18 at 6:59

















EntityManager is not default? I tried and this postpersist worked.

– asdasasd
Nov 26 '18 at 6:18





EntityManager is not default? I tried and this postpersist worked.

– asdasasd
Nov 26 '18 at 6:18













@asdasasd Default was a bit bad wording. Repository uses em but not in 'default mode' it starts transaction. When you just inject em all changes to managed entities propagate to db without persist() or save(). But with repositories - with default settings - you always need to call save(..). And postPersist() might work differently depending on the settings.

– pirho
Nov 26 '18 at 6:46





@asdasasd Default was a bit bad wording. Repository uses em but not in 'default mode' it starts transaction. When you just inject em all changes to managed entities propagate to db without persist() or save(). But with repositories - with default settings - you always need to call save(..). And postPersist() might work differently depending on the settings.

– pirho
Nov 26 '18 at 6:46













yes, i always use repository.save . So, with postpersist it wont be problem?

– asdasasd
Nov 26 '18 at 8:10





yes, i always use repository.save . So, with postpersist it wont be problem?

– asdasasd
Nov 26 '18 at 8:10













Should not be a problem. I'm just unable to find documentation & proof about how Spring data actually handles this case.

– pirho
Nov 26 '18 at 9:03





Should not be a problem. I'm just unable to find documentation & proof about how Spring data actually handles this case.

– pirho
Nov 26 '18 at 9:03




1




1





@asdasasd You could make method static, inject it if possible to make it bean, or instantiate with new() when yoou need it. But I recommend you to do prepare a separate question considering that it is more helpful then to others also.

– pirho
Nov 29 '18 at 6:59





@asdasasd You could make method static, inject it if possible to make it bean, or instantiate with new() when yoou need it. But I recommend you to do prepare a separate question considering that it is more helpful then to others also.

– pirho
Nov 29 '18 at 6:59













1














It seems like the code column you want is just exactly the id column but with another encoding (base 36 rather than base 10).



You don't need to store it, nor use a persistence annotation for that :




  • For reading the code : on the entity, just add a getter method getCode() that compute it based on the id value.

  • For searching by code, just convert the code from base 36 to base 10, then search by id.






share|improve this answer
























  • But i need another unique thing to store.

    – asdasasd
    Nov 13 '18 at 14:56
















1














It seems like the code column you want is just exactly the id column but with another encoding (base 36 rather than base 10).



You don't need to store it, nor use a persistence annotation for that :




  • For reading the code : on the entity, just add a getter method getCode() that compute it based on the id value.

  • For searching by code, just convert the code from base 36 to base 10, then search by id.






share|improve this answer
























  • But i need another unique thing to store.

    – asdasasd
    Nov 13 '18 at 14:56














1












1








1







It seems like the code column you want is just exactly the id column but with another encoding (base 36 rather than base 10).



You don't need to store it, nor use a persistence annotation for that :




  • For reading the code : on the entity, just add a getter method getCode() that compute it based on the id value.

  • For searching by code, just convert the code from base 36 to base 10, then search by id.






share|improve this answer













It seems like the code column you want is just exactly the id column but with another encoding (base 36 rather than base 10).



You don't need to store it, nor use a persistence annotation for that :




  • For reading the code : on the entity, just add a getter method getCode() that compute it based on the id value.

  • For searching by code, just convert the code from base 36 to base 10, then search by id.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 13 '18 at 14:45









ThierryThierry

3,6122129




3,6122129













  • But i need another unique thing to store.

    – asdasasd
    Nov 13 '18 at 14:56



















  • But i need another unique thing to store.

    – asdasasd
    Nov 13 '18 at 14:56

















But i need another unique thing to store.

– asdasasd
Nov 13 '18 at 14:56





But i need another unique thing to store.

– asdasasd
Nov 13 '18 at 14:56


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53283009%2fspring-boot-save-non-id-field-depending-on-id-field-while-saving-object%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

Xamarin.form Move up view when keyboard appear

Post-Redirect-Get with Spring WebFlux and Thymeleaf

Anylogic : not able to use stopDelay()