Note that there are some explanatory texts on larger screens.

plurals
  1. POHibernate storing maps using @MapKey annotation
    primarykey
    data
    text
    <p>Following these <a href="http://download.oracle.com/javaee/5/api/javax/persistence/MapKey.html" rel="nofollow">examples</a>, because <code>@MapKey</code> and <code>@MapKeyManyToMany</code> in <a href="http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/" rel="nofollow">hibernate</a> is deprecated, I tryed to figure out this case, with no sucess: </p> <p><strong>taskAssignationState</strong></p> <pre><code>protected Map&lt;User, Boolean&gt; usersState; @ManyToMany( cascade={CascadeType.ALL}, mappedBy = "taskAssignationState", fetch=FetchType.LAZY ) @MapKey(name = "user") public Map&lt;User, Boolean&gt; getUsersState() { return usersState; } public void setUsersState(Map&lt;User, Boolean&gt; usersState) { this.usersState = usersState; } </code></pre> <p><strong>User</strong> </p> <pre><code>@ManyToMany(cascade=CascadeType.ALL) @JoinTable(name = "user_state_task_assignation", joinColumns=@JoinColumn(name="username"), inverseJoinColumns=@JoinColumn(name="assignation_state")) public TaskAssignationState getTaskAssignationState() { return taskAssignationState; } public void setTaskAssignationState(TaskAssignationState taskAssignationState) { this.taskAssignationState = taskAssignationState; } </code></pre> <p>I have also tried <code>@MapKeyColumn</code>, <code>@MapKeyJoinColumn</code>/<code>@MapKeyColumn</code> instead, but with the same resault. The exception</p> <blockquote> <p>Caused by: <code>org.hibernate.AnnotationException</code>: Illegal attempt to map a non collection as a <code>@OneToMany</code>, <code>@ManyToMany</code> or <code>@CollectionOfElements</code>: <code>com.path.taskAssignationState</code></p> </blockquote> <p>I read in another threat a similar problem, and the solution was to make a <code>Set</code> and then join the tables. But I guess there is a way using these annotations. </p> <p><strong>EDIT</strong></p> <p>The previous problem is fixed, just need to return an List. </p> <pre><code>@ManyToMany @JoinTable(name = "user_state_task_assignation", joinColumns=@JoinColumn(name="assignation_state"), inverseJoinColumns=@JoinColumn(name="username")) @MapKeyJoinColumn(name="state") public Map&lt;User, Boolean&gt; getUsersState() { return usersState; } public void setUsersState(Map&lt;User, Boolean&gt; usersState) { this.usersState = usersState; } @ManyToMany( cascade={CascadeType.ALL}, mappedBy = "taskAssignationState", fetch=FetchType.LAZY ) public List&lt;TaskHistory&gt; getTasksHistory() { return tasksHistory; } public void setTasksHistory(List&lt;TaskHistory&gt; tasksHistory) { this.tasksHistory = tasksHistory; } </code></pre> <p>But now I am facing this other probelm: </p> <pre><code>org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext-dao.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.path.TaskAssignationState.usersState[java.lang.Boolean] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:546) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) at org.springframework.context.support.ClassPathXmlApplicationContext.&lt;init&gt;(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.&lt;init&gt;(ClassPathXmlApplicationContext.java:83) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:202) at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:251) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:248) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload