- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 JAVA 和 JPA 的新手,我用 google 搜索解决方案但没有结果。我找到了很多例子,但它们在我的场景中不起作用。我想映射下面给出的这两个表:
书架 table
CREATE TABLE "SOA2"."BOOKSHELF" (
"BOOKSHELF_ID" NUMBER(19,0) NOT NULL ENABLE,
"NAME_TXT" VARCHAR2(255 CHAR),
PRIMARY KEY ("BOOKSHELF_ID") USING INDEX PCTFREE 10 INITRANS 2
MAXTRANS 255 NOCOMPRESS LOGGING
TABLESPACE "SOA2" ENABLE
) SEGMENT CREATION DEFERRED PCTFREE 10 PCTUSED 40 INITRANS 1
MAXTRANS 255 NOCOMPRESS LOGGING TABLESPACE "SOA2" ;
和
图书表
CREATE TABLE "SOA2"."BOOK" (
"BOOK_IX" NUMBER(19,0) NOT NULL ENABLE,
"BOOKSHELF_ID" NUMBER(19,0) NOT NULL ENABLE,
"NAME_TXT" VARCHAR2(255 CHAR),
PRIMARY KEY ("BOOK_IX", "BOOKSHELF_ID") USING INDEX PCTFREE 10 INITRANS 2
MAXTRANS 255 NOCOMPRESS LOGGING TABLESPACE "SOA2" ENABLE, CONSTRAINT "FK_RJWHY4FC"
FOREIGN KEY ("BOOKSHELF_ID")
REFERENCES "SOA2"."BOOKSHELF" ("BOOKSHELF_ID") ENABLE)
SEGMENT CREATION DEFERRED PCTFREE 10 PCTUSED 40 INITRANS 1
MAXTRANS 255 NOCOMPRESS LOGGING TABLESPACE "SOA2" ;
为了便于理解,其结构如下所示
Bookshelf Table 和 Book Table经过所有搜索后,我使用了 Eclipse“表中的 JPA 实体”工具。它为我生成了以下类:
Bookshelf.java
@Entity
@Table(name="BOOKSHELF")
public class Bookshelf implements Serializable {
@Id
@Column(name="BOOKSHELF_ID", unique=true)
private long bookshelfId;
@Column(name="NAME_TXT")
private String nameTxt;
//bi-directional many-to-one association to Book
@OneToMany(mappedBy="bookshelf", cascade={CascadeType.ALL})
private List<Book> books;
public List<Book> getBooks() {
return this.books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
//Code removed for the sake of brevity
}
Book.java
@Entity
@Table(name="BOOK")
public class Book implements Serializable {
@EmbeddedId
private BookPK id;
@Column(name="NAME_TXT", length=255)
private String nameTxt;
//bi-directional many-to-one association to Bookshelf
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="BOOKSHELF_ID", nullable=false, insertable=false, updatable=false)
private Bookshelf bookshelf;
//Code removed for the sake of brevity
}
BookPK.java
@Embeddable
public class BookPK implements Serializable {
@Column(name="BOOK_IX")
private long bookIx;
@Column(name="BOOKSHELF_ID", insertable=false, updatable=false, unique=true, nullable=false)
private long bookshelfId;
public BookPK(long bkShlfId, long bkId) {
this.bookshelfId = bkShlfId;
this.bookIx = bkId;
}
//Code removed for the sake of brevity
}
我正在测试它:Test.java
//Physics Bookshelf
Bookshelf physicsShelf = new Bookshelf();
physicsShelf.setNameTxt("Physics");
physicsShelf.setBookshelfId(500);
//Add Books
Book book1 = new Book();
book1.setNameTxt("God and the Physics");
book1.setId(new BookPK(500, 600));
Book book2 = new Book();
book2.setNameTxt("Hyperspace");
//if I pass 500 as first param in below constructor
//Changing 500 to 501 solves the issue
book2.setId(new BookPK(500, 600)); //javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [books.Book#books.BookPK@8a6d]
//Add Books into list
List<Book> bookList = new ArrayList<Book>();
bookList.add(book1);
//Error: Following error appears if I uncomment the following line
bookList.add(book2); //Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (SOA2.FK_RJ) violated - parent key not found
//Set Books
physicsShelf.setBooks(bookList);
EntityTransaction transaction = entitymanager.getTransaction();
transaction.begin();
entitymanager.persist(physicsShelf);
transaction.commit();
physicalsShelf 仅成功插入一本书,如果我在 bookList 中插入第二本书,则会出现 Test.java 注释中描述的错误。
请指导我
我做错了什么以及如何纠正。我真的被困住了。
有没有办法通过注释其他两个类来摆脱 BookPK.java 类。
我无法更改数据库我使用的是 Oracle 11g 和 JPA 2.1
任何帮助将不胜感激
问候
最佳答案
id 应该是唯一的,但在您的情况下,您将 book1 和 book2 的 id 设置为 Book(500,600)
book2.setId(new BookPK(500, 600)); //javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [books.Book#books.BookPK@8a6d
因此,当您尝试添加 book2.setId(newBookPK(500,600));
时,它会提示它已经存在。
尝试
book2.setId(new BookPK(500, 601));
编辑:第二个问题
我想你可以。在您的 Book 实体中尝试替换
@EmbeddedId
private BookPK id;
与
@Id
@Column(name="BOOK_IX")
private long bookIx;
关于java - 双向多对一映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27264709/
我有一个 ProductDescription ViewController,它从我放置在许多 ViewController 中的 ProductTable UITableView 调用。 对于 St
首先,是的,我使用的是 DistinctRootEntityResultTransformer。 我有以下(Fluent NHibernate)映射: public FirstObjectMap()
我有两个模型:Book 和 Author。每个Author有很多本书,每本书有很多作者,所以我在Author和Book之间建立了ManyToMany关系,如下所示: class Author(mode
我正在尝试映射两个具有一对一关系的类之间的关系。在互联网上查找后,似乎人们更喜欢使用多对一来映射它。 例如,有一个 Order 类和 Bill 类。比尔持有发票的 FK。 这是我为比尔绘制的 map
假设有以下实体类: public class Player { public virtual int ID { get; set; } public virtual string Name { g
我想尝试一下 dynamodb 我能够保存单个对象。现在我想尝试创建一个多对一的关联。 许多任务应附加到单个用户。 @DynamoDBTable(tableName = "User") public
所以,情况如下: 表ComputerInventory,其中包含{computerInventoryID(主键)、TagID(唯一)、名称等} 表reviewStatus,其中包含{reviewSta
我在使用 hibernate 进行多对一映射时遇到问题。我有两个表,表 A 和表 B。我在这些表之间映射了多对一关系。两个表可以一起使用,也可以单独使用。 用 Java 中的类来表示表,例如: cla
我的实体: @Entity public class Film { @Id @GeneratedValue(strategy = IDENTITY) private long film
我必须制作拼贴项目的域层。我们的标准很少,比如我们必须使用 Hibernate,而且数据库也是固定的。 数据库的相关部分看起来几乎像这样: BusEntity(表 1) 总线 ID 公交车具体信息 总
如果有这两个实体: @Entity @Table(name = "CUSTOMER") public class Customer { @Id @GeneratedValue(stra
我正在尝试找出在多对一关系中检索单个最新结果的最有效方法。 示例: 实体 A - 团队(名称)实体 B - 员工(姓名,已创建) 团队>员工 我想在 Employee 上创建一个获取请求,返回每个团队
假设我有一个MySQL表read,记录了一个userid和一个articleid,记录了用户阅读了哪些文章。我现在想列出已阅读文章 1、2 和 3 的用户。 我知道以下是不可能的,但它说明了这个想法:
我的两个实体之间存在多对一关系。现在我希望当没有更多的 child 时将 parent 移除。 我的情况: 类(class)联系人 类(class)组织 一个组织有几个联系人,每个联系人都有一个组织。
我有下表: A 和 B A 有一个复合 PK:id int,类型 string。 B 只有 A 的 PK 之一:id int。 如何使用 B 的 id 和常量 type='typeB' 定义从 A 到
我正在为我的项目使用 Hibernate 3 映射一些实体,并简单地解释说我有这样的东西: Student 实体(tstudent 表) UniversityStudent 实体(tuniversit
我有一个成员表:成员(id, name, gender, head_id) 我想要的是建立以户主(家庭成员)为基础的家庭关系。就像这样:一个成员属于一个家庭(由成员定义) 也许我可以将其拆分为 2 个
示例 父类 @OneToMany(mappedBy = "parent") private List childs; 子类 @ManyToOne(cascade = CascadeType.ALL)
我有以下化学过程数据集,由 5 个连续输入向量组成,产生 1 个输出。每个输入每分钟采样一次,而输出操作系统每 5 采样一次。 虽然我相信输出取决于之前的 5 个输入向量,但我决定为我的设计寻找 LS
我正在将我的应用程序从原则 1 转换为原则 2.4我确实从数据库自动映射,但缺少一些关系: 表:产品产品 ID、标题、价格 表:位置产品id , 产品id , 位置id , 数量 因此每个 Locat
我是一名优秀的程序员,十分优秀!