All entries for Wednesday 01 June 2005

June 01, 2005

Doh! Read the docs!

Follow-up to Weird "problem" with hibernate composite–elements from Colin's blog

So the problem is that in hibernate the "index" mapping refers to the absolute index in the List, so if the values for the index column are 0,1,2,5
then your List will have 5 elements, and the 3rd and 4th elements will be null.

I wrongly assumed (yeah yeah, ass out of u and me) that the index was the value used to order the elements :(

Because the existing data is just so bad, I ended up mapping it as a Set and specifying the order-by clause to be the relevant column.


Calendar.roll: I'm so stupid :)

So I just spent about 10 minutes wondering why my unit tests were failing when they have been working for the past 3 weeks, ever since being written actually.

The following code:

—— start of code ——

Calendar cal = GregorianCalendar.getInstance();
Date now = cal.getTime();
cal.roll(Calendar.DAY_OF_MONTH, false);
Date then = cal.getTime();
cal.roll(Calendar.DAY_OF_MONTH, true);
cal.roll(Calendar.DAY_OF_MONTH, true);
Date future = cal.getTime();

ArchivedFile fileA = new ArchivedFileImpl(new File(""), then, "");
ArchivedFile fileB = new ArchivedFileImpl(new File(""), now, "");
ArchivedFile fileC = new ArchivedFileImpl(new File(""), future, "");

SortedSet files = new TreeSet();
files.add(fileA);
files.add(fileC);
files.add(fileB);

ArchivedFile[] orderedFiles = files.toArray(new ArchivedFile[] {});
assertEquals("most recent", fileC, orderedFiles[0]);
assertEquals("middle", fileB, orderedFiles[1]);
assertEquals("oldest", fileA, orderedFiles[2]);

—— end of code ——

was testing that ArchivedFileImpl was correctly sorted based on date.

Spot the problem? It is because roll does not increment other fields, so if you are on the last day of the month and roll 1, you stay on the same month, but go to the first day, so 31st June, rolled by 1 becomes 1st June!

So my code was fine, my unit test was dodgy :) :)

The answer BTW (which is crystal clear if you read the docs) is to call Calendar.add.

As an aside, "roll" kind of implies a knock on effect, "add" doesn't imply anything, so I would have expected the behaviour to be opposite. Oh well.

P.S. The reason I am so stupid is because I have run into this "problem" before :)


June 2005

Mo Tu We Th Fr Sa Su
May |  Today  | Jul
      1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30         

Search this blog

Tags

Galleries

Most recent comments

  • Interesting… While I'm not completely convinced in such microbenchmarks, I'm pretty sure that 1ms … by Alexander Snaps on this entry
  • Hello. I bought the book yesterday. I was trying to find the source code for chapter 11 and chapter … by Suleman on this entry
  • http://woosight.net/account/login?username=demo by live mashup demo on this entry
  • Thanks mate ….. This blog was really helpful. by Maaz Hurzuk on this entry
  • Ty. Not directly helpful for my problem, but pointed me in the right direction. You will also get th… by Mike E. on this entry

Blog archive

Loading…
Not signed in
Sign in

Powered by BlogBuilder
© MMXXI