你好,亲爱的StackOverflow社区,我最近遇到了一个问题,我不能把一个已经保存的对象的引用放进去。我不想保存或更新对象,因为这些对象是预先插入到我们的数据库中的。
所以基本上我的情况是这样的:我有一个父,在本例中它是一个摄取,对象有一个IntakeTimes列表,它们被声明为remainingdoses。有道理,嗯。
我的模型看起来如下:
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name="child_disease")
public class ChildDisease extends BaseEntity {
@ManyToOne(cascade = CascadeType.DETACH)
@JoinColumn(name="child_Fk")
private Child child;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name="disease_Fk")
private Disease disease;
@OneToOne(cascade = CascadeType.PERSIST, orphanRemoval = true, fetch=FetchType.EAGER)
@JoinColumn(name = "medication_decree_Fk")
private MedicationDecree medicationDecree;
}
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table
public class MedicationDecree extends BaseEntity {
@Column
private float consumptionAmount;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private MeasuringUnit measuringUnit;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name="medication_Fk")
private Medication medication;
@OneToOne(cascade = CascadeType.PERSIST)
private Intake intake;
@ManyToMany(cascade = CascadeType.MERGE)
private List<IntakeTime> intakeTimes;
}
@Entity
@Getter
@Setter
@NoArgsConstructor
public class Intake extends BaseEntity {
@OneToMany(cascade = CascadeType.MERGE)
public List<IntakeTime> remainingDoses;
@Column
public Date date;
}
我期待着任何帮助或提示,谢谢社区。
发生错误,因为您试图保存一个已经存在于db中的实体(分离),但是默认的JParepository
无法识别实体是新的还是旧的,所以它试图在db中创建一个新的实体。
你可以用多种方法来解决这个问题。方法之一是实现persistable
接口。基本上,您需要使实体实现可持久化
并提供isnew()
和getid()
方法,并且可以使用这样的逻辑,即如果已经填充了'id字段,则可以在
isnew()`中返回true
public class Intake extends BaseEntity implements Persistable{
@override
public Boolean isNew(){
return this.id==null;//or any other logic with which you can identify if it's a new object or not
}
}
参考:Persistable SpringDoc
最后是持久性上下文配置: 我很感谢你的帮助。
我想使用查找从一个集合中获取一些数据并将其放入另一个集合中。 在localfield或foreignfield中写什么都不重要,因为它从player_game_stats中获取所有数据并将其插入player集合中的每个文档中。我想检查localfield和foreignField是否相等,但lookup不检查这一点。我对mongodb使用NoSqlBooster
我有两个Avro模式V1和V2,在spark中读取如下: V1有两个字段“一”和“二” V2 与新字段:“三” 场景:编写器使用 V1 进行写入,读取器使用 V2 对 avro 记录进行解码。我的期望是看到字段3填充了默认值,即null。但是我在spark工作中遇到了以下异常。 我是不是错过了什么?我的理解是avro支持向后兼容。
我正在使用wedriveri o 4.5: 我需要等到某个元素存在,如果它不存在,处理这种情况。 例如: 但如果页面上不存在元素,webdriver会将我的测试标记为失败,并显示消息:“超时10000毫秒。”。尝试减少运行时间或增加测试规格的超时时间(http://webdriver.io/guide/testrunner/timeouts.html); 如果回复promise,确保其得到解决 >
为什么下面的失败? 测试的正确方法是什么?
下面是一个类和log4j配置: $vi My.java $vi log4j2.xml 在日志/foo.bar.log中出现和消息。这是我所期望的。但是在日志/foo.log中什么都没有出现,我期望那里有消息。在控制台上也什么都没有出现,但是我期望消息。所以它没有像我预期的那样工作。那么我的错误是什么? 还有LogManager的论点。getLogger必须是记录器的名称。但我也看到了论点是类的例子