[hibernate-issues] [Hibernate-JIRA] Commented: (ANN-632) @IndexColumn doesn't set value of index column
J (JIRA)
noreply at atlassian.com
Sat Aug 9 13:02:30 EDT 2008
[ http://opensource.atlassian.com/projects/hibernate/browse/ANN-632?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_30820 ]
J commented on ANN-632:
-----------------------
I also had some simular problems. I thought it was a bug, but it wasn't. When using IndexColumn you carefully have to know:
-where you define the inverse side
-that you shouldn't use the inverse side for saving the index
-that you save in the correct order of parent and child.
-how to swap from inverse side if needed.
Dan Allen, in your first example you have: mappedBy = "job". I think this should be mappedBy = "person', because the mappedBy attribute has to be the inverse property of the target entity.
Second, in your usage of the first example, you use: person.getJobs().add(job1); But this is on the inverse side, so it should be job1.setPerson(person) instead. (Or you should make a convenience method, of you should change the inverse side.)
Also took me a lot of time before I found my problem.
Btw I enjoy reading your new Seam book :-)
> @IndexColumn doesn't set value of index column
> ----------------------------------------------
>
> Key: ANN-632
> URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN-632
> Project: Hibernate Annotations
> Issue Type: Improvement
> Components: documentation
> Affects Versions: 3.3.0.ga
> Reporter: Dan Allen
> Assignee: Diego Plentz
> Priority: Minor
>
> I'm sure I will get screamed at for this, but the @IndexColumn just doesn't work with @OneToMany. When I say it doesn't work, it means that I am a reasonable person and I have studied the documentation for at least 4 hours and I just cannot figure out how to make it work. So either the documentation needs to be improved, or there is something wrong with Hibernate. I refuse to believe that I am this stupid.
> Here is my problem in a nutshell. I have a Person and a collection of Jobs. The Jobs should be an indexed list based on the history that the person holds them.
> @Entity
> public class Person {
> @Id @GeneratedValue
> private long id;
> @Column
> private String name;
> @OneToMany(cascade=ALL, fetch=LAZY, mappedBy = "job")
> @IndexColumn(base = 1, name = "order")
> private List<Job> jobs = new ArrayList<Job>();
> // getters and setters
> }
> @Entity
> public class Job {
> @Id @GeneratedValue
> private long id;
> @Column
> private String name;
> @ManyToOne
> @JoinColumn(name="person_id")
> private Person person;
> @Column
> private Integer order;
> // getters and setters
> }
> If I do the following, I get NULL for order.
> Person person = new Person();
> person.setName("Chuck")
> Job job1 = new Job();
> job1.setName("sysadmin")
> job1.setPerson(person);
> person.getJobs().add(job1);
> Job job2 = new Job();
> jobs2.setName("network admin")
> job2.setPerson(person);
> person.getJobs().add(job2);
> entityManager.persist(person);
> Assume that the reason I am not assigning an order is more complex than this example. The point is that we want to see the order column populated with the index of the list.
> Now, if you give me the business about removing mappedBy, to that I will respond that by removing mappedBy, Hibernate tries to work with a person_job table, which I don't want. I want two tables, one for person and one for job.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list