相关疑难解决方法(0)

Hibernate使用orphanRemoval触发约束违规

我在使用JPA/Hibernate(3.5.3)设置时遇到问题,我有一个实体,一个"帐户"类,它有一个子实体列表,"联系"实例.我正在尝试将Account的实例添加/删除到Account的List <Contact>属性中.

将新实例添加到集合中并调用saveOrUpdate(account)可以保持一切可爱.如果我然后选择从列表中删除联系人并再次调用saveOrUpdate,则SQL Hibernate似乎会产生涉及将account_id列设置为null,这违反了数据库约束.

我究竟做错了什么?

下面的代码显然是一个简化的摘要,但我认为它涵盖了问题,因为我在不同的代码中看到相同的结果,这真的是这个简单.

SQL:

CREATE TABLE account ( INT account_id );
CREATE TABLE contact ( INT contact_id, INT account_id REFERENCES account (account_id) );
Run Code Online (Sandbox Code Playgroud)

Java的:

@Entity
class Account {
  @Id
  @Column
  public Long id;

  @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
  @JoinColumn(name = "account_id")
  public List<Contact> contacts;
}

@Entity
class Contact {
  @Id
  @Column
  public Long id;

  @ManyToOne(optional = false)
  @JoinColumn(name = "account_id", nullable = false)
  public Account account;
}

Account account = new Account();
Contact contact = new …
Run Code Online (Sandbox Code Playgroud)

java orm hibernate jpa jpa-2.0

15
推荐指数
1
解决办法
1万
查看次数

调试时如何直接在IDE中查看其他对象的私有字段?

C#是我最熟悉的语言,但在工作时使用Java.我想你可以说我对使用Visual Studio IDE很满意.我喜欢它的调试器之一是我可以为任何表达式放置监视变量(Eclipse中的"表达式").因此,我可以在调试时查看公共或非公共特定字段的值,调用方法等,没有问题.

我似乎不能在Eclipse中做同样的事情.我不得不求助于为字段调用相关的getter方法(假设它有一个).如果它没有,我要么暂时添加一个,所以我可以查看它,记得在我完成时删除它或者我只是SOL.

如何在一个私有字段上为对象设置监视表达式?或者我只是做错了,我必须制作特殊的表达方式来查看它们?
(或者,有没有更好的方法来获取我想要的信息?)

例如,

我有一个HttpServletRequest想要留意的requestURI.如果我只是观察请求变量,它会列出很多字段,而且信息太多了.我只对对象中的一件事感兴趣,所以为了最小化这个,我想为这一件事添加一个表达式.

字段名称显然是requestURI这样我添加了表达式:request.requestURI.Eclipse抛出一个错误,说它不是一个字段(它是,它只是不公开).我不得不直接去场地,而是去吸气器:request.getRequestURI()这很好.但我不能总是指望吸气剂可用.

变量视图
变量视图

表达式视图
表达式视图

java eclipse

10
推荐指数
2
解决办法
3325
查看次数

NHibernate:已删除的对象将通过级联重新保存.替换对象并删除旧对象

我试图替换ProgramItem上的TimeBlock对象,然后删除旧的TimeBlock对象.删除部分给我带来了问题.我有一些'相对'简单的nHibernate问题删除旧的TimeBlock对象.

例外:
已删除的对象将通过级联重新保存(从关联中删除已删除的对象)[*.Mode.TimeBlock#15]
15是oldTimeBlock的Id

我在解决这类问题时没有遇到任何问题我只是尝试了以下任何用法:

oldTimeBlock.ProgramItems = new List<ProgramItem>();
programItem.TimeBlock = null;
Run Code Online (Sandbox Code Playgroud)

以任何顺序保存和删除块,并使用Inverse()更改映射.
我需要一些新鲜的眼睛 - 我怎么能让这个工作?

码:

public class TimeBlock
{
    public virtual int Id { get; set; }
    public virtual IList<ProgramItem> ProgramItems { get; set; }
    ...
}

public class TimeBlockMap : ClassMap<TimeBlock>
{
    public TimeBlockMap()
    {
        Id(x => x.Id);
        HasMany(x => x.ProgramItems).Cascade.SaveUpdate(); // Have tested with Inverse() but seemed to make no difference
    }
}


public class ProgramItem : ImageModel, IIdentifiable
{
    public virtual int Id { get; …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate nhibernate-mapping fluent-nhibernate

5
推荐指数
1
解决办法
4962
查看次数

Hibernate ManyToMany删除的对象将通过级联重新保存

出于某种原因,我无法删除属于多对多关系的对象.我收到以下错误:

Exception in thread "main" org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [edu.cs157b.hibernate.AppointmentRequest#11]
    at org.hibernate.internal.SessionImpl.forceFlush(SessionImpl.java:1232)
Run Code Online (Sandbox Code Playgroud)

这是我的三个类,它们映射了多对多的关系.从本质上讲,Doctor有很多Patients通过AppointmentRequest,反之亦然.这是课程

医生

package edu.cs157b.hibernate;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.*;

@Entity
@Table(name="DOCTOR_INFO")
@NamedQueries (
    {
        @NamedQuery(name = "Doctor.getAll", query = "from Doctor"),
        @NamedQuery(name = "Doctor.findByName", query = "from Doctor where name = :name")
    }
)
public class Doctor implements Person {

    private int id;
    private String name;
    private Specialty specialty;
    private List<AppointmentRequest> appointmentRequests …
Run Code Online (Sandbox Code Playgroud)

java eclipse hibernate jpa

1
推荐指数
1
解决办法
6758
查看次数