我在JPA中更新对象时遇到问题
我有豆子用户
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@Column(name = "name", nullable = false)
private String name;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "fk_program_rating")
private List<Rating> ratingList = new ArrayList<Rating>();
}
和
public class Rating extends BaseModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@ManyToOne()
@JoinColumn(name = "fk_program_rating", nullable = false)
@ForeignKey(name = "FK_prog_rate")
@OnDelete(action = OnDeleteAction.CASCADE)
private Program program;
}
当尝试更新时给我异常:当表评级包含行时,无法通过反射获得字段值
错误TransactionInterceptor:434-应用程序异常被提交异常com.vodafone.visradio.dataaccess.exception.DataAccessException覆盖:org.hibernate.PropertyAccessException:无法通过com.vodafone.visradio.dataaccess.model.Rating的反射获取器获取字段值。ID
关于这个问题的任何帮助,
谢谢
尝试更改映射注释。@JoinColumn
从中删除注释ratingList
并添加mappedBy
属性:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "user")
private List<Rating> ratingList = new ArrayList<Rating>();
与关联user
的Rating
实体中的属性名称在哪里?@ManyToOne``User
问题内容: 我有以下实体: 还有以下EJB: 调用persist时,将引发具有以下根本原因的异常: 这是GlassFish 4.1的完整日志: 这是怎么引起的,我该如何解决? 问题答案: 我有同样的问题。这个错误似乎是从HB 4.3.6开始的,并且一直存在,我正在尝试4.3.10。具有相同的结果。 在我看来,访问实体字段的方式在HB 4.3.6+中已更改,可能与类加载器有关。在HB 4.3.6之前
我有一个方法,它返回字符串类型的字段对象列表。 这个方法应该将所有字符串字段都大写: 问题是:"field.set(...)"不起作用。它应该将值大写并将其设置为该字段的新值,但它不起作用...我如何解决这个问题的任何想法?(PS:在真正的代码中,"something Class.class"被设置为真正的类名...) 正在生成的错误是field.get(this)方法(insdefield.se
问题内容: 我试图通过反射接收字段值。问题是我不知道字段类型,必须在获取值时确定它。 这段代码会导致以下异常: 无法将java.lang.String字段com .... fieldName设置为java.lang.String 我尝试进行转换,但出现编译错误: 要么 我怎样才能做到这一点? 问题答案: 像之前回答的那样,你应该使用: 有时更喜欢的另一种方法是动态调用getter。示例代码: 还应
问题内容: 我有一个方法: 当运行时,我得到如下输出: 现在我该怎样提取实际字符串值入, 使用反射? 问题答案: 看起来您需要引用该类的实例。您可能要调用get和pass的引用,将返回值转换为String。 您可以使用get,如下所示:
问题内容: 我正在尝试获取对象的第一个父项的字段和值。我当前的代码是这样的: 我的课程结构与此类似: 现在,我将一个C对象传递给该方法,并且我想从C和B中获取所有字段,而不是从A中获取所有字段。有没有办法做到这一点(使用反射,我不想实现其他方法)? 问题答案: Luchian,使用getSuperclass()方法获取对Class对象的引用,该对象表示所讨论对象的超类类型。之后,您可以像在示例中一