我会问您有关改变DiscriminatorValue的机会的问题。例如,我有2个实体:
@Entity
@Table(name = "user")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name = "user_type")
@DiscriminatorValue("CUSTOMER")
public class User
和
@Entity
@Table(name = "businessUser")
@DiscriminatorValue("FOUNDER")
public class BusinessUser extends User
我有回购协议:
@NoRepositoryBean
public interface UserBaseRepository<T extends User> extends JpaRepository<User, Long> {
T findByEmail(String email);
}
@Transactional
@Repository("UserRepository")
public interface UserRepository extends UserBaseRepository<User> {
}
@Transactional
@Repository("BusinessUserRepository")
public interface BusinessUserRepository extends UserBaseRepository<BusinessUser> {
}
首先,我创建了一个简单的用户。该实体具有user_type CUSTOMER。然后,我想扩展该实体并将其修改为BusinessCustomer。当我尝试执行以下操作时:查找用户实体并将其强制转换为businessUser实体,我得到了IllegalCastException。我无法将用户转换为BusinessUser。
请帮助我,如何更改user_type或将用户更新为businessUser。
今天过得愉快, 谢谢
答案 0 :(得分:0)
要做这样的事情,我认为您被迫使用本机查询。 实际上,我确实认为在所示情况下使用继承不是最佳选择,但这是另一回事了。
答案 1 :(得分:-1)
您可以创建一个Service
,在那里您可以提升您的用户...
public BusinessUser promote(User user) {
BusinessUser businessUser = new BusinessUser();
businessUser.setId(user.getId());
businessUser.setEmail(user.getEmail());
userRepository.delete(user);
return businessUserRepository.save(businessUser);
}
如果要提升的用户仍然具有原始ID,则请勿使用@GeneratedValue
,并且您需要先删除原始用户,然后再保存提升的用户。