为某人添加新地址时,应创建新的修订版。已创建修订版,但修订版中实体的其余字段标记为空。
不同且正确:当我更改一个人的名字时,会创建一个修改,在其中输入所有字段。
个人实体:
@Entity
@Table(name = "Person")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Audited
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator", sequenceName = "HIBERNATE_SEQUENCE", allocationSize = 1)
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@OneToMany(mappedBy="person")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Address> addresses = new HashSet<>();
个人审计实体:
@Entity
@Table(name = "person_aud")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class PersonAud implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private AuditIdentity auditIdentity;
@Column(name = "revtype")
private Short revtype;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@ManyToOne
@MapsId("auditIdentity.id")
@JoinColumn(name = "id", nullable = false)
private Person person;
@OneToMany
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Address> addresses = new HashSet<>();
地址实体:
@Entity
@Table(name = "address")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Audited
public class Address implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator", sequenceName = "HIBERNATE_SEQUENCE", allocationSize = 1)
private Long id;
@Column(name = "street")
private String street;
@Column(name = "house_number")
private String houseNumber;
@Column(name = "zip_code")
private String zipCode;
@Column(name = "city")
private String city;
@Column(name = "state_province")
private String stateProvince;
@Column(name = "country")
private String country;
@ManyToOne
@JsonIgnoreProperties("addresses")
private Person person;
@OneToOne
@JsonIgnoreProperties("addresses")
@NotAudited
private PersonAud personAud;
如果我添加一个属于XY的新地址,那么我的表看起来像这样:
PERSON_AUD: ID: 1版本:1001版本类型:1名字:NULL姓氏:NULL
例如,如果我更改名字,则输入first_name和last_name的字段。
问题已解决(不完美):
我改变了路线:
@OneToMany(mappedBy="person")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Address> addresses = new HashSet<>();
到:
@OneToMany(cascade = {CascadeType.ALL})
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Address> addresses = new HashSet<>();
现在这个过程是这样的:
>
添加具有空地址数组的新人员
添加引用人员id的新地址
像PUT一样对这个Person分配地址对象。
=PERSON_AUD表格将包含修订和字段。
问题:它并不完美,因为您必须手动将地址分配给该人。
还有其他可能的解决办法吗?
问题内容: 假设您有一个类,并创建了一个HashSet来存储此类的实例。如果尝试添加相等的实例,则集合中仅保留一个实例,这很好。 但是,如果HashSet中有两个不同的实例,并采用一个实例并使其与另一个实例完全相同(通过复制字段),则HashSet将包含两个重复的实例。 这是演示此代码的代码: 上面代码的输出: 有没有一种方法可以强制HashSet验证其内容,以便删除在上述情况下创建的可能重复条目
我有两个实体具有@OneTomany(Entity1)&@ManyToOne(Entity2)双向关系。在@OneTomany关系中,我有@Cascading{Cascade.All}。但是当我在事务或方法中将具有@ManyToOne关系的实体的初始为false的boolean属性更改为true,然后又变回false时,它会导致数据库触发更新查询,将实体的boolean设置为false,这似乎是错
问题内容: 我想要做的就是在我的数据库的用户,但它应该排,一个新行。 Ofcourse我连接到数据库第一和的,并从URL字符串。 可以,但是只添加新行; 这是我尝试过的; 和 和 但是它们都不起作用,我在做什么错? 任何帮助是极大的赞赏! 问题答案: 如果不存在约束,请在您的列上创建约束: 用途: (subs_name, subs_email, subs_birthday) VALUES (?,
问题内容: 我正在尝试在两个SQL Server 2008表之间移动一些数据。如果该记录存在于表2中,并且带有来自表1的电子邮件,则使用来自表1的数据更新该记录,否则插入新记录。 在表1中,我有许多列;名字,姓氏,电子邮件等。 我不确定如何构造查询以更新Table2(如果来自Table1的电子邮件存在)或插入新行(如果Table2中不存在来自Table1的电子邮件)。 我尝试在Google上进
我有这样一个df: 其中ID是另一个df的主键和唯一键,该df是此df的源。集群不是密钥,不同的ID通常具有相同的集群值;不管怎么说,这是我必须掌握的信息。 我想获得的是这个数据框: 如果这是不可能的,像这样的字典也可以: 我试过很多方法都没有成功。。似乎无法将列表作为数据帧值插入。。无论如何,我认为以某种巧妙的方式进球应该不会那么困难。。对不起,如果我想不起来了,但我对编码是新手 有什么建议吗?
问题内容: 是否可以在sql中执行更新语句,但仅在更新不同时才执行更新? 例如 如果在数据库中, 不应 执行任何类型的更新 但是,如果 这 应该 执行更新。 问题答案: 使用更新前触发器可以做到这一点。在此触发器中,您可以将旧值与新值进行比较,并在新值不变的情况下取消更新。但这将导致呼叫者网站上的错误。 我不知道为什么要这样做,但是这里有几种可能性: 性能:这里没有性能提升,因为更新不仅需要找到正