@Entity
@Table(name = "users")
data class User(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Int? = null,
@Column(name = "accountId")
val accountId: String,
@JsonIgnore
@OneToMany(mappedBy = "user")
val userApps: List<UserApp>? = null
)
@Entity
@Table(name = "user_apps")
data class UserApp(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Int? = null,
@ManyToOne
val user: User
)
interface UserRepository: JpaRepository<User, Int> {
fun findByUserAppId(userAppId: Int): List<UserApp>
}
多对一的时候,@OneToMany要写明关联entity侧的变量名
像这个例子里写的一样,@OneToMany(mappedBy = “user”) 要协商mappedBy = “user”,这个user对应的是UserApp的@ManyToOne的变量名称,如果不一致启动spring的时候会出错。
@OneToMany的变量要赋初始值
val userApps: List<UserApp>? = null
如果没有初始值,启动spring的时候也会报错
相关联的Entity的JpaRepositroy的方法命名
像例子中的findByUserAppId,这个UserAppId,关联的是userApps的单数形式userApp,然后Id代表的是UserApp的Entity的主键。
然后,还有一个重要的点,table里面的column,也必须命名为user_app_id,不然虽然能启动Spring,但是执行sql的时候会出错。