Jpa 获取由以下原因引起的错误:org.hibernate.AnnotationException:使用@OneToMany或@ManyToMany以未映射的类为目标
我是JPA/Hyperjaxb竞技场的新手。我的目标是在Author表和Book表(postgres数据库)之间生成多对多映射 在数据库中,Author表有columns-id,name,Book表有columns-id,title。 我有一个连接(链接)表AUTHORS\u BOOKS,其中包含列aid、bid(其中aid映射到Author表中的id字段,bid映射到Book表中的id字段) 我们正在公开一个Web服务(不要关注为什么要使用Web服务),以允许客户端查询/crud作者和书籍。对于Web服务,我正在使用hyperjaxb符号创建POJO(同样,这就是它的工作方式) 以下是my types.xsd文件:Jpa 获取由以下原因引起的错误:org.hibernate.AnnotationException:使用@OneToMany或@ManyToMany以未映射的类为目标,jpa,jaxb,hibernate-mapping,hyperjaxb,Jpa,Jaxb,Hibernate Mapping,Hyperjaxb,我是JPA/Hyperjaxb竞技场的新手。我的目标是在Author表和Book表(postgres数据库)之间生成多对多映射 在数据库中,Author表有columns-id,name,Book表有columns-id,title。 我有一个连接(链接)表AUTHORS\u BOOKS,其中包含列aid、bid(其中aid映射到Author表中的id字段,bid映射到Book表中的id字段) 我们正在公开一个Web服务(不要关注为什么要使用Web服务),以允许客户端查询/crud作者和书籍。对
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
我一直在网上搜索答案,要么没有解决方案,要么大多数错误都是由于@Entity或@Id或@ManyToMany标记中缺少targetEntity字段造成的。我真的需要一些指点!非常感谢你的时间和帮助!谢谢。问题是,为什么Hibernate认为com.mycompany.Book没有映射
我会怀疑重复类或类似的问题。首先尝试运行一个独立的往返测试(HJ3提供了一些支持)。这显然与Tomcat版本等无关。谢谢大家的帮助!原来这是一个映射问题。在/src/main/resources/persistence.xml文件中,我忘记添加完整的类路径(对于Book.java),所以Hibernate找不到它。所以这更像是一个整合问题。再次感谢您的帮助 也有相同的结果。原来我太傻了,竟然在oneToMany类中编写List而不是List…为什么你认为这是一个重复类问题?我不太了解Hibernate如何确定映射,但如果存在重复项,它会不会选择一个呢?(从你的回答来看,似乎不是这样)只是一个理论:如果Hibernate说com.mycompany.Book未映射,但你确定该类包含注释,那么有两种可能的解释:要么Hibernate出于某些原因不处理注释,要么有另一个同名的类未映射。就我个人而言,我会编写一个附带Hibernate源代码的往返测试或调试。
<xs:complexType name="author">
<xs:sequence>
<xs:element name="id" type="xs:long"/>
<xs:element name="name" type="xs:string" />
<xs:element name="books" type="tns:book" minOccurs="0" maxOccurs="1000"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="book">
<xs:sequence>
<xs:element name="id" type="xs:long"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="authors" type="tns:author" minOccurs="0" maxOccurs="1000"/>
</xs:sequence>
</xs:complexType>
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings schemaLocation="sampletypes.xsd"
node="/xs:schema">
<jaxb:bindings node="xs:complexType[@name='author']">
<hj:entity>
<orm:table name="AUTHORS">
<orm:unique-constraint>
<orm:column-name>NAME</orm:column-name>
</orm:unique-constraint>
</orm:table>
</hj:entity>
</jaxb:bindings>
<jaxb:bindings node="xs:complexType[@name='cocom']">
<hj:entity>
<orm:table name="BOOKS">
<orm:unique-constraint>
<orm:column-name>NAME</orm:column-name>
</orm:unique-constraint>
</orm:table>
</hj:entity>
</jaxb:bindings>
<jaxb:bindings
node="xs:complexType[@name='author']//xs:element[@name='books']">
<hj:many-to-many name="books">
<orm:join-table name="AUTHORS_BOOKS">
<orm:join-column name="aid" referenced-column-name="ID" />
<orm:inverse-join-column name="bid" referenced-column-name="ID" />
</orm:join-table>
</hj:many-to-many>
</jaxb:bindings>
<jaxb:bindings
node="xs:complexType[@name='book']//xs:element[@name='authors']">
<hj:many-to-many name="authors" mappedBy="books">
<hj:cascade>
<hj:cascade-persist/>
</hj:cascade>
</hj:many-to-many>
</jaxb:bindings>
<jaxb:bindings
node="xs:complexType[@name='author']//xs:element[@name='id']">
<hj:id>
<orm:generated-value strategy="AUTO" />
</hj:id>
</jaxb:bindings>
<jaxb:bindings
node="xs:complexType[@name='book']//xs:element[@name='id']">
<hj:id>
<orm:generated-value strategy="AUTO" />
</hj:id>
</jaxb:bindings>
</jaxb:bindings>
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "author", propOrder = {
"id",
"name",
"books"
})
@Entity(name = "Author")
@Table(name = "AUTHOR", uniqueConstraints = {
@UniqueConstraint(columnNames = {
"NAME"
})
})
@Inheritance(strategy = InheritanceType.JOINED)
public class Author
implements Serializable, Equals, HashCode, ToString
{
//some othe stuff
@ManyToMany(targetEntity = Book.class, cascade = {
CascadeType.ALL
})
@JoinTable(name = "AUTHORS_BOOKS", joinColumns = {
@JoinColumn(name = "aid", referencedColumnName = "ID")
}, inverseJoinColumns = {
@JoinColumn(name = "bid", referencedColumnName = "ID")
})
public List<Book> getBooks() {
if (books == null) {
books = new ArrayList<Book>();
}
return this.books;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "book", propOrder = {
"id",
"title",
"authors"
})
@Entity(name = "Book")
@Table(name = "BOOK", uniqueConstraints = {
@UniqueConstraint(columnNames = {
"NAME"
})
})
@Inheritance(strategy = InheritanceType.JOINED)
public class Book
implements Serializable, Equals, HashCode, ToString
{
private final static long serialVersionUID = 1L;
protected long id;
@XmlElement(required = true)
protected String title;
protected List<Author> authors;
/**
* Gets the value of the id property.
*
*/
@Id
@Column(name = "ID", scale = 0)
@GeneratedValue(strategy = GenerationType.AUTO)
public long getId() {
return id;
}
/**
* Sets the value of the id property.
*
*/
public void setId(long value) {
this.id = value;
}
@Basic
@Column(name = "NAME_", length = 255)
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
@ManyToMany(targetEntity = Book.class, cascade = {
CascadeType.ALL
})
@JoinTable(name = "AUTHORS_BOOKS", joinColumns = {
@JoinColumn(name = "PARENT_AUTHOR_ID")
}, inverseJoinColumns = {
@JoinColumn(name = "CHILD_BOOK_ID")
})
public List<Book> getBooks() {
if (books == null) {
books = new ArrayList<Book>();
}
return this.books;
}
Error Message:
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class:com.mycompany.Author.books[com.mycompany.Book]