Re: JPA a Integer vs. BigInteger pro ID

2013-10-29 Tema obsahu Ondra Medek
Ahoj,

v historii mercurialu by měl být i autor změny ;-)

Jinak je dobře možné, že změna byla bezdůvodná. Asi nějak tak, že autor
pracoval třeba i na jiném projektu, kde bylo potřeba mít @Id typu
BigInteger, tak pro jistotu a do budoucna tuto změnu provedl všude.
Nebo třeba jen takovou radu vyčetl na nějakém blogu. Nebo mu takové Id
vygenerovat Hibernate generátor, tak si řekl, že to musí být tedy správně,
apod.

Bohužel Hibernate je složitý nástroj a neexistují žádné jednoduché
tutoriály typu todle nedělejte nebo todle dělejte jen výjimečně. A
proto člověk udělá i řadu omylů, než např. zjistí, že na Id stačí Integer
nebo Long (a nebo int, long?).

Ondra Medek


2013/10/28 František Kučera konfere...@frantovo.cz

 Mám tu jeden projekt, který používá JPA (konkrétně Hibernate +
 PostgreSQL) a v historii jeho mercurialu jsem našel změnu datového typu
 primárních klíčů z Integeru na BigInteger. Bohužel tam nic víc napsané
 není. Anotace @Id by měla podle JavaDocu fungovat s oběma typy. A nezdá
 se mi, že by to někdo měnil jen tak bezdůvodně, zřejmě to bylo kvůli
 nějakému problému/incidentu. (jenže rozsah hodnot by měl bohatě stačit i
 u Integeru - a datový typ v SQL je taky integer - 32 bitů).
 Napadá někdo, co mohlo být důvodem?

 Díky,
 Franta



Re: JPA a Integer vs. BigInteger pro ID

2013-10-29 Tema obsahu František Kučera
 Bohužel Hibernate je složitý nástroj a neexistují žádné jednoduché
 tutoriály typu todle nedělejte nebo todle dělejte jen výjimečně. A
 proto člověk udělá i řadu omylů, než např. zjistí, že na Id stačí
 Integer nebo Long (a nebo int, long?).

Ahoj,
pro objektové typy (Integer místo int) může být dobrý důvod – podle null
se jednoznačně pozná, že ID ještě nebylo přiřazeno a nemusí se používat
nějaké magické hodnoty jako 0 nebo -1. Ale co vedlo k tomu BigIntegeru
je stále záhadou. Můžu to refaktorovat zpátky na Integer a pozorovat, co
se rozbije, ale do toho se mi moc nechce…
Franta



Re: JPA a Integer vs. BigInteger pro ID

2013-10-29 Tema obsahu Ondra Medek
Ahoj,

na tom Integer vs. int jsem jen chtěl ukázat, že pro Hibernate chybí nějaký
jednoduchý best practices. Někdo má dobrý důvod používat Integer, jiný
má zase dobrý důvod používat int, a další se zase bude bít za BigInteger.

Co za DB používáte, jaký je tam přesně datový typ pro ID? Nemohlo se stát,
že se vysoké hodnoty toho SQL integer namapovaly do Javy špatně? Tedy bych
zkusil najít extrémní hodnoty (jak + tak -) těch Id na produkci. Případně
bych si takové hodnoty na vývojové DB udělat ručně. Pak bych převedl
BigInteger na Integer, a testoval. A taky zkus Google např. MySQL integer
to Hibernate Integer problem, apod.


Ondra Medek


2013/10/29 František Kučera konfere...@frantovo.cz

  Bohužel Hibernate je složitý nástroj a neexistují žádné jednoduché
  tutoriály typu todle nedělejte nebo todle dělejte jen výjimečně. A
  proto člověk udělá i řadu omylů, než např. zjistí, že na Id stačí
  Integer nebo Long (a nebo int, long?).

 Ahoj,
 pro objektové typy (Integer místo int) může být dobrý důvod - podle null
 se jednoznačně pozná, že ID ještě nebylo přiřazeno a nemusí se používat
 nějaké magické hodnoty jako 0 nebo -1. Ale co vedlo k tomu BigIntegeru
 je stále záhadou. Můžu to refaktorovat zpátky na Integer a pozorovat, co
 se rozbije, ale do toho se mi moc nechce...
 Franta