Java @OneToMany mappedBy映射到_____
Java @OneToMany mappedBy映射到_____,java,jpa,annotations,one-to-many,jpql,Java,Jpa,Annotations,One To Many,Jpql,mappedBy将映射到的是什么?或者,更确切地说,它应该映射到什么 根据@OneToMany,下面的标题字段映射到@EntityFoo?然后Foo将是javax.mail.Header的包装器 package net.bounceme.dur.usenet.model; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.logging.Level;
mappedBy
将映射到的是什么?或者,更确切地说,它应该映射到什么
根据@OneToMany
,下面的标题
字段映射到@Entity
Foo
?然后Foo
将是javax.mail.Header
的包装器
package net.bounceme.dur.usenet.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.Header;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.persistence.*;
@Entity
public class Articles implements Serializable {
private static final long serialVersionUID = 1L;
private static final Logger LOG = Logger.getLogger(Articles.class.getName());
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String subject;
@OneToMany(mappedBy="foo") //a wrapper for Header is needed?
private List<Header> headers = new ArrayList<>();
public Articles() {
}
public Articles(Message message) {
try {
subject = message.getSubject();
} catch (MessagingException ex) {
Logger.getLogger(Articles.class.getName()).log(Level.SEVERE, null, ex);
}
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Articles)) {
return false;
}
Articles other = (Articles) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return subject;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
}
package net.bounceme.dur.usenet.model;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.mail.Header;
导入javax.mail.Message;
导入javax.mail.MessaginException;
导入javax.persistence.*;
@实体
公共类项目实现可序列化{
私有静态最终长serialVersionUID=1L;
私有静态最终记录器LOG=Logger.getLogger(Articles.class.getName());
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@纵队
私有字符串主题;
@OneToMany(mappedBy=“foo”)//是否需要标头的包装器?
私有列表头=新的ArrayList();
公共物品(){
}
公共物品(讯息){
试一试{
subject=message.getSubject();
}捕获(消息例外){
Logger.getLogger(Articles.class.getName()).log(Level.SEVERE,null,ex);
}
}
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
@凌驾
公共int hashCode(){
int hash=0;
hash+=(id!=null?id.hashCode():0);
返回散列;
}
@凌驾
公共布尔等于(对象){
//TODO:警告-如果未设置id字段,此方法将不起作用
if(!(物品的对象实例)){
返回false;
}
Articles other=(Articles)对象;
如果((this.id==null&&other.id!=null)| |(this.id!=null&&!this.id.equals(other.id))){
返回false;
}
返回true;
}
@凌驾
公共字符串toString(){
返回主题;
}
公共字符串getSubject(){
返回主题;
}
public void setSubject(字符串主题){
this.subject=主语;
}
}
检查此处:
有关部分是:
这有点不言自明。你想要一些例子吗
例如,如果您的
文章
有许多标题
对象,那么文章
拥有联盟关系,因为文章有许多标题。是的,需要javax.mail.Header的包装器,一般来说,您不能直接持久化任意类,尤其是不可序列化的类。此外,它们不能是设计实体之间关系的列表元素
mappedBy的值是双向关系的拥有方字段的名称。作为示例,让我们假设Article实体与Foo实体确实存在一对多关系:
@OneToMany(mappedBy="article")
private List<Foo> headers;
当双向关系持久化到数据库时,将使用拥有方(在本例中为Foo中的文章)。在JPA 2.0规范中,这是通过以下文字来说明的:
托管实体之间的双向关系将被持久化
基于关系拥有方持有的引用。它是
开发人员有责任保留内存中的引用
在拥有方和持有在相反方与
当他们改变的时候,他们会互相帮助。在单向一对一的情况下
以及一对多关系,开发人员有责任
确保关系的语义得到遵守
哪一类的字段?说阅读文档不是一个好答案!尤其是当它是可怕的API文档时。我不熟悉实体框架的东西,但这里的关键点似乎是要注意,mapped by引用了另一个类上的一个字段(通常是私有的),我甚至不太记得这个问题。我通常不会对答案投反对票,不管它值多少钱(它必须是一个糟糕的答案,而不是上面的情况),但我注意到doc链接是指向javaee5而不是6。我认为语法“owning relationship”有帮助,即
Article
就是owning relationship。就个人而言,我并不介意RTFM链接,只要它不是“手册”,而是指向某一页或某一部分。稍有了解,让我试试:)好吧,但我得到了异常描述:[class net.bounceme.dur.usenet.model.Articles]在关系属性[field headers]中使用非实体[class javax.mail.Header]作为目标实体.
所以我需要重新思考这个问题。而且,很多人都会想到它,但我不希望数据库中有每个可能的头——但这是今后的事情。我想这就回答了这个问题。谢谢:)
@OneToMany(mappedBy="article")
private List<Foo> headers;
@Entity
public class Foo {
...
@ManyToOne
Article article;
}