sql >> Databasteknik >  >> RDS >> Mysql

Två genererade värden i doktrinen

Vad jag vet är GeneratedValue-strategin reserverad för primärnyckeln, vilket innebär att du bara kan använda den en gång per enhet.

Beroende på dina behov har du dock några alternativ:

  • Du kan alltid ha en prePersist livscykelhändelse , ställ in valfritt värde för namnet innan du fortsätter med det första gången.

  • Om du är beroende av ID:t för att generera ett annat unikt ID från det, kan du implementera en postPersist-händelse, ställa in ditt namn där och se till att du spolar två gånger (första gången för att generera primärnyckeln, andra gången för att spara namnet).

  • Om det är ok för dig att namnet är tomt i databasen under en tid, kan det vara ok att implementera en postLoad-händelse, som fyller namnet om den är tom. På så sätt ser din applikation alltid namnet (eftersom det antingen laddas från databasen eller fylls av postLoad-händelsen) och när du lägger till eller redigerar information första gången efter den första lagringen, kommer ditt namn också att sparas

  • Det kan vara ok att inte spara namnet och få det genererat av någon cronjob/deamon/kö så att din ansökan inte behöver hantera det. Det enda du behöver göra är att se till att ett saknat namn inte förstör något.

  • Kanske kan det vara ok att generera en nyckel som inte är beroende av primärnyckeln och som därmed kan genereras av en global händelsehanterare . Du har naturligtvis nackdelen att en sådan händelsehanterare, eftersom han är global, blir anropad för varje objekt du kvarstår, oavsett om det är rätt enhet.

  • Sist men inte minst kan det vara ok att falla tillbaka till lagrade procedurer/utlösare för att låta databasen hantera detta. På så sätt behöver du inte bråka med detta i din applikation. Men se upp, det kan finnas fallgropar på vägen (som en utvecklare som glömmer detta eftersom det inte finns i koden utan i databasen!).

Det kan finnas andra sätt. Det jag försökte säga är:Använd inte generedValue för icke-primära nyckelegenskaper!




  1. Få polygonpoäng mysql

  2. Hur LÅT SOM fungerar i MariaDB

  3. EM12c tillåter nu DB12c för Repos

  4. Mysql Chain Select Query