弹簧数据jpa的奇怪行为

费边·鲁兹(Fabian Lurz)

我是JPA的新手,在我看来,JoinColumn的行为有所不同,我想知道为什么。

UserEntites应该加入权限。

组织应加入OrganizationSettings。

我有两种不同的方法,并且都可以工作。

情况1

UserEntity:

    @Entity
@Table(name = "users")
@Inheritance(strategy = InheritanceType.JOINED)
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "userId")
    private List<UserAuthority> authorities;
}

UserAuthoritiesEntity

@Entity(name = "authorities")
@Table(name = "authorities")
public class UserAuthority {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Long userId;

    private String authority;
}

在我看来,JoinColumn名称引用了UserAuthority.userId-并按预期工作。

情况二

参见我的另外两个班:

OrganizationEntity:

@Entity
@Table(name="organization")
public class OrganizationEntity {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long id;

    @NotNull
    private String url;

    @NotNull
    private String name;

    @OneToOne (cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinColumn(name="id",updatable = false)
    private OrganizationSettingsEntity settings;
}

组织设置:

    @Entity
@Table(name = "organization_settings")
public class OrganizationSettingsEntity {

    @Id
    private Long organizationId;
}

如您所见->组织正在使用名称为id的Organizationing Joining OrganizationSettings进行工作。但是,在OrganizationSettings中没有ID-只有OrganizationId。这行得通-但让我感到奇怪。

为什么第二个也起作用?不是@JoinColumn(name="organizationId")吗?

尼尔·斯托克顿

春天与它无关。JPA是标准API。

1-N情况:您将在authorities表中创建一个名称为FK的列userId(链接回users表)。您似乎还希望对userId元素中的字段重新使用同一列...这将迟早引起您的问题,因为重新使用未标记该userId字段的insertable=false, updatable=false将意味着两者都可能尝试对其进行更新。要么删除userId元素中的字段,要么将该字段转换为类型UserEntity(并mappedBy在1-N所有者字段上使用使其具有双向关系),或者userId使用前面提到的那些属性标记该字段。

1-1情况:您将在organization表中创建一个名称为FK的列id(链接到该organization_settings表)。遗憾的是,该列与该表的PK将使用的列相同,因此您再次出于两个不同的目的重用该列,将导致地狱。将关系FK的列更改为不同的内容-FK在organization表中,而不是在另一侧。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

弹簧数据JPA和几何类型

来自分类Dev

如何使用Hibernate @DynamicUpdate弹簧数据的JPA?

来自分类Dev

奇怪的WPF数据绑定行为

来自分类Dev

JSON 访问数据 - 奇怪的行为

来自分类Dev

合并数据框时的奇怪行为

来自分类Dev

如何实现长/复杂的查询与弹簧数据的JPA 2.1

来自分类Dev

带有反应性弹簧的数据JPA测试

来自分类Dev

spring-data-jpa @RestController @Repository 可选的奇怪行为

来自分类Dev

奇怪的行为

来自分类Dev

奇怪的行为

来自分类Dev

奇怪的行为

来自分类Dev

关于基于数据时间列过滤数据帧的奇怪行为

来自分类Dev

预测行为的奇怪行为

来自分类Dev

使用LINQ从Microsoft CRM检索数据时出现奇怪的行为

来自分类Dev

奇怪的行为,由链接的数据库导致

来自分类Dev

尝试在AsyncTask上尝试使用SQLite检索数据的奇怪行为

来自分类Dev

尝试连接SQLite数据库的奇怪行为

来自分类Dev

奇怪的行为,由链接的数据库导致

来自分类Dev

弹簧数据的JPA节省:相关实体保存为空不属于

来自分类Dev

弹簧数据的JPA清除链接实体的所有参数后持续

来自分类Dev

弹簧数据 JPA。级联更新仅适用于特殊情况

来自分类Dev

Solr dynamicField与弹簧数据

来自分类Dev

弹簧数据与规格结合

来自分类Dev

弹簧数据错误

来自分类Dev

奇怪的addEventListener行为

来自分类Dev

MATLAB subs():奇怪的行为

来自分类Dev

右移位的奇怪行为

来自分类Dev

奇怪的约束行为

来自分类Dev

IronPython奇怪的行为