2016-12-11 17 views
1

Добрый день. Я стараюсь иметь зависимости «много-ко-многим» с персистентностью api. я заполнить новые пользовательские данные и попытаться добавить его в базу данных, но получаю исключение:Java Persistence api: class использует класс не-сущности как объект-объект в атрибуте отношения

Exception Description: [class main.java.entities.User] uses a non-entity [class main.java.entities.UserAccounts] as target entity in the relationship attribute [field accounts].

Я пытаюсь использовать разностные значения для @ManyToMany аннотации в name секции, такие как bank_user_accounts и userAccounts. Второе значение - это имя единицы в persistence.xml. Но эта проблема все еще существует.

класс

Пользователь:

@Entity(name="bank_users") 
public class User { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @ManyToMany 
    @JoinTable(
     name = "bank_user_accounts", 
     joinColumns = @JoinColumn(name = "user_id"), 
     inverseJoinColumns = @JoinColumn(name = "account_id") 
) 
    private List<UserAccounts> accounts; 
} 

UserAccounts класс:

@Entity(name="bank_user_accounts") 
public class UserAccounts { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int id; 

    @Column(name = "user_id") 
    private int userId; 

    @Column(name = "account_id") 
    private int accountId; 
} 

persistence.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
      version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> 
    <persistence-unit name="users" transaction-type="RESOURCE_LOCAL"> 
    <class>main.java.entities.User</class> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
     <property name="javax.persistence.jdbc.url" value="deleted" /> 
     <property name="javax.persistence.jdbc.user" value="deleted" /> 
     <property name="javax.persistence.jdbc.password" value="deleted" /> 
    </properties> 
    </persistence-unit> 

    <persistence-unit name="userAccounts" transaction-type="RESOURCE_LOCAL"> 
    <class>main.java.entities.UserAccounts</class> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
     <property name="javax.persistence.jdbc.url" value="deleted" /> 
     <property name="javax.persistence.jdbc.user" value="deleted" /> 
     <property name="javax.persistence.jdbc.password" value="deleted" /> 
    </properties> 
    </persistence-unit> 

</persistence> 
+0

Таким образом, я использую это как пример, и теперь все отлично работает https://www.mkyong.com/hibernate/hibernate-many-to-many-relationship- example-annotation/ – Evgeniy175

ответ

0

Отношения между User и UserAccounts звука, а @OneToMany или просто встраиваемого класса ,

@ManyToMany должен иметь аннотацию с обеих сторон (двунаправленный) и должен иметь атрибут mappedBy, установленный с одной стороны, чтобы указать имя свойства другой стороны, ссылающееся на этот объект как коллекцию.

0

Одна вещь, которую я наблюдал в вашем коде, вы использовали аннотацию manytomany в классе User, но вы не использовали ее в классе userAccounts. Чтобы достичь отношения ManyToMany, оба объекта должны быть аннотированы с помощью ManyToMany.

+0

Это тоже ошибка, должен быть список , а UserAccounts - класс для ссылки Пользователь и учетная запись, которая представляет много-много ссылок – Evgeniy175

+0

Я называю этот плагиат ... – Mordechai

0

Проблема (хотя может быть устаревшая), что у вас есть ссылка от одной единицы персистентности к другой. Вы можете легко поместить и в тот же блок:

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 
      version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> 
    <persistence-unit name="users" transaction-type="RESOURCE_LOCAL"> 
    <class>main.java.entities.User</class> 
    <class>main.java.entities.UserAccounts</class> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
     <property name="javax.persistence.jdbc.url" value="deleted" /> 
     <property name="javax.persistence.jdbc.user" value="deleted" /> 
     <property name="javax.persistence.jdbc.password" value="deleted" /> 
    </properties> 
    </persistence-unit> 
</persistence> 

 Смежные вопросы

  • Нет связанных вопросов^_^