实体:课程
,教师
,Coursepk
。
每门课程只能由一名老师
授课。
我在班级教师
和班级课程
之间使用双向关系@onetoone()
。
@Entity(name = "Teacher")
public class Teacher {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "firstName")
private String firstName;
@Column(name = "lastName")
private String lastName;
@OneToOne(mappedBy = "officialTeacher")
private Course course;
//setter getter constructors are omitted for brevity
}
课程
类:
@Entity(name = "Course")
public class Course {
@EmbeddedId
private CoursePk pkCourse;
@OneToOne(cascade = CascadeType.PERSIST)
private Teacher officialTeacher;
//setter getter constructors are omitted for brevity
}
应表示复合主键的Coursepk
。
@Embeddable
public class CoursePk implements Serializable {
@Column(name = "courseName")
private Integer courseId;
}
我的运行示例:
private void composedPrimaryKey() {
Teacher teacher = new Teacher("Jeff", "Boss");
CoursePk composedPK = new CoursePk(1);
Course course = new Course(composedPK, teacher);
Course savedCourse = courseRepository.save(course);
}
course_name | official_teacher_id
1 | 1
id | first_name |last_name
1 | null | null
id | first_name |last_name
1 | Jeff | Boss
如果使用了Spring Data JPA,那么CrudRepository.save(…)
方法如何检测要执行的方法调用有一些细节:EntityManager.persist(…)
或EntityManager.merge(…)
:
保存实体可以使用CrudRepository.save(…)
方法执行。它通过使用底层JPAEntityManager
来保存或合并给定的实体。如果实体尚未持久化,Spring Data JPA通过调用EntityManager.persist(…)
方法保存实体。否则,它调用EntityManager.merge(…)
方法。
Spring Data JPA提供了以下策略来检测实体是否是新的:
<…>
-Spring Data JPA-参考文档。
回到问题中提到的代码段。
由于course
实例的identifier属性(主键)不是null,Spring Data JPA将其视为现有(而不是新的)实体,并调用EntityManager.merge(…)
方法,而不是EntityManager.persist(…)
方法。
我是ASP.NET新手,我必须使用身份验证和授权框架创建一个ASP.NET MVC项目,但对数据库(SQL Server)的访问必须在一个独立的web服务项目中完成,所以我创建了一个web API项目,该项目还包含请求数据库的应用程序的所有服务,即使是通过调用web API的方法而不是ASP.NET MVC项目的方法来完成身份验证,而且一切都很好。 请帮忙。
问题内容: 我创建了一个使用@Id指向@Embeddable复合键的实体。我认为一切正常。但是,据我所知,在将@Id切换为@EmbeddedId之后,一切仍然可以正常工作。 之前: 后: 引用复合键时,使用@Id和@EmbeddedId批注之间有区别吗? 问题答案: 实际上,我对 “之前” 版本的工作感到惊讶。根据规范,映射您的复合键的正确方法是 “之后” 版本。引用JPA 1.0规范: 2.1.
你可以使用一个组件作为一个实体类的标识符。你的组件类必须满足以下要求: 它必须实现 java.io.Serializable 接口 它必须重新实现 equals() 和 hashCode() 方法,始终和组合关键字在数据库中的概念保持一致 注意 注意:在 Hibernate3 中,第二个要求并非是 Hibernate 强制必须的。但最好这样做。 你不能使用一个 IdentifierGenerato
问题内容: CSS标识符和的(完整)有效/允许的 字符集 字符是什么? 是否可以使用正则表达式进行验证?它与浏览器无关吗? 问题答案: 字符集无关紧要。允许的字符更重要。检查CSS规范。这里是相关的: 在CSS中,标识符(包括选择器中的元素名称,类和ID )只能包含字符和ISO 10646 及更高版本的字符,以及连字符()和下划线();它们不能以数字,两个连字符或连字符后跟数字开头。标识符还可以包
主要内容:标识符,关键字任何一种计算机语言都离不开标识符和关键字,因此下面将详细介绍 Java 的标识符、关键字和保留字。 标识符 Java 中标识符是为方法、变量或其他用户定义项所定义的名称。标识符可以有一个或多个字符。在 Java 语言中,标识符的构成规则如下。 标识符由数字(0~9)和字母(A~Z 和 a~z)、美元符号($)、下划线(_)以及 Unicode 字符集中符号大于 0xC0 的所有符号组合构成(各符号
标识符 Go 的源文件以 .go 为后缀名存储在计算机中,这些文件名均由小写字母、数字、大写字母组成,例如 hello.go 。如果文件名由多个部分组成,则使用下划线 _ 对它们进行分隔,如 pro_03.go 。文件名不包含空格或其他特殊字符。 一个源文件可以包含任意多行的代码,Go 本身没有对源文件的大小进行限制。 Go 语言也是区分大小写的,这与 C 家族中的其它语言相同。有效的标识符必须以