The problem is that you have mapped ROW_1 as <id> when in fact there is more than one row that has the same value. The column used for the <id> attribute should be the primary key of the table or at least have a unique value for each row. If there is no such column in the table you may have to use a composite id that consists of as many column that you need to make up a unique value. Read more about this here:
http://www.hibernate.org/hib_docs/v3/re ... ompositeid
This doesn't really answer your original question (why you get 4 objects with the same data), so I'll try to do that as well. Hibernate uses the value of the <id> property to store all loaded objects in an internal cache (the first-level cache). So, the first row is read, a UnitData object is created, stored in the cache, and then returned as a query result. When the second row is about to be read Hibernate first reads the ROW_1 value. Hibernate checks the cache and finds that there is already a UnitData object for that value. Since the cache can only contain a single object for each <id> value Hibernate simply returns the object that is stored in the cache and never reads the remaining columns from the database. The same happens for the remaining rows.