【发布时间】:2017-01-25 15:45:46
【问题描述】:
我想我在某个地方搞错了......
假设 1 个玩家有 1 个统计表 (oneToOne)
类玩家:
@Component
@Entity
@Table(name = "player")
public class Player {
@Id
@GeneratedValue
@JsonView(View.Summary.class)
@Column(name = "id")
private Long id;
@Column(name = "uid", unique = true, nullable = false)
@JsonView(View.Summary.class)
private Long uid;
@OneToOne(mappedBy = "player", cascade = CascadeType.ALL)
@JsonView(View.Summary.class)
private Stats stats;
....
班级统计:
@Component
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "stats")
public class Stats implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@JsonView(View.Summary.class)
@Column(name = "id")
private Long id;
@OneToOne
@JoinColumn(name = "player_uid", referencedColumnName = "uid", nullable = false)
@JsonView(View.Summary.class)
private Player player;
....
类 PlayerDAO:
public interface JPAPlayerDAO extends JpaRepository<Player, Long> {
Player findByUid(Long uid);
Player findByName(String name);
}
如果我这样做,那很好:
Player p = new Player();
p.setUid(123L);
p.setName("Mike");
updater.saveOrUpdatePlayer(p);
p = playerDAO.findOne()
如果我尝试按名称或 uid 查找它,我会收到错误:
Player p = new Player();
p.setUid(123L);
p.setName("Mike");
updater.saveOrUpdatePlayer(p);
p = playerDAO.findByName("Mike")
or
p = playerDAO.findByUid(123L)
....
Caused by: org.hibernate.property.access.spi.PropertyAccessException: Error accessing field...
Caused by: java.lang.IllegalArgumentException: Can not set java.lang.Long field ...entities.Player.uid to java.lang.Long
我认为我的 oneToOne 参考可能有问题。
【问题讨论】:
-
如果我删除一个参考。从 stats 到 uid @JoinColumn (name = "player_uid", referencedColumnName = "uid"),一切正常。但我需要它。
标签: java hibernate spring-boot spring-data-jpa