问题:
我是否需要删除接口IAbstractUserService上的泛型?
是否与此答案的类型擦除有关?https://stackoverflow.com/a/31266152/6698175
问题:
我得到了这个例外:
<代码>组织。冬眠ErrorClassException:对象[id=1]不属于指定的子类[com.faz.idb.models.advisor]:加载的对象属于错误的com类。法兹。idb。模型。客户
尝试加载实体时:
T getUserByEmail(String email);
像这样:
AbstractUserServiceImpl<? extends AbstractUser> userService;
AbstractUser user = userService.getUserByEmail(email);
目前我有:
<代码>Hibernatev7.0.3。最终
抽象父类:AbtrsactUser
子类:客户和顾问;
@Getter
@Setter
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "user_type", discriminatorType = DiscriminatorType.STRING)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(name = "customer", value = Customer.class),
@JsonSubTypes.Type(name = "adviser", value = Adviser.class)
})
@DiscriminatorOptions(force = true)
public abstract class AbstractUser { ........ }
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@DiscriminatorValue("adviser")
@DiscriminatorOptions(force = true)
public class Adviser extends AbstractUser { ........ }
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@DiscriminatorValue("customer")
@DiscriminatorOptions(force = true)
public class Customer extends AbstractUser { ........ }
服务:
public interface IAbstractUserService<T extends AbstractUser> {
T getUserByEmail(String email);
实施:
@Service public class AbstractUserServiceImpl<T extends AbstractUser> implements IAbstractUserService<T> {
@Autowired
private AbstractUserRepository<T> userRepository;
@Override
public T getUserByEmail(String email) {
return userRepository.findByEmail(email).orElse(null);
}
存储库:
@Repository公共接口AbstractUserRepository扩展JpaRepository
生成的SQL:
Hibernate:选择abstractus0\u0。id为id2\u 0\uAbstractus0\u。电子邮件格式为email3\u 0\uAbstractus0\u。密码为password4\u 0\uAbstractus0\u。user\u type as user\u typ1\u 0\ufrom abstract\u user abstractus0\uwhere abstractus0\u。user\u键入('advisor','customer')和abstractus0\u。电子邮件=?
Hibernate:选择person0\u0。customer\u id为customer1\u 5\u 0\u,person0\u。first\u名称为first\u na2\u 5\u 0\u,person0\u。性别为gender3\u 5\u 0\u,person0\u。last\u名称为last\u nam4\u 5\u 0\u,建议1\u。id为id2\U 0\U 1\uAdviser1\u。电子邮件格式为email3\u 0\u 1\u,adviser1\u。密码为password4\u 0\u 1\ufrom person0\uLeft outer join abstract\u user adviser1\uon person0\u。customer\u id=adviser1\u。id,其中person0\u0。客户id=?2022-03-14 06:14:34.029
信息79095---[nio-8080-exec-2]o.h.e.内部。DefaultLoadEventListener:hh000327:执行load命令时出错
在我的数据库中,我只有一个用户:
用户类型| id |电子邮件|密码
客户| 1 |xyz@live.fr | ....
问题解决了。
我在@OneToOne关系的子实体中使用了不带@JoinColumn(name=“id”)的@MapsId。
说明:
“AbstracUser”由“Customer”实体扩展,他与“PersonDetails”有@OneToOne关系。
所以在《客户》中,我有:
@OneToOne(mappedBy = "Customer", fetch = FetchType.LAZY,
cascade {CascadeType.ALL}, optional = false)
@PrimaryKeyJoinColumn private PersonDetails person;
和人物详情:
@MapsId()
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name="id")
private Customer customer;
解决方案是在
@MapsId("id")
或
@MapsId
@JoinColumn(name="id")
N、 B类
在这个问题中,我正在使用Hibernate 4.3.4。最终和SpringORM 4.1.2。释放。 我有一个User类,它包含这样的一组Card实例: 我有几种类型的卡,每种都分别扩展Card基类和CardInstance基类,如下所示: 如果我将UnitCardInstance或HeroCardInstance添加到cards集合并保存实体,则一切正常。但是,如果我向集合中添加AbilityC
问题内容: 通过使用抽象类,我们可以实现与接口相同的功能,那么为什么Java不允许以下代码? 我知道可以通过仅使用接口来实现多重继承,但是上面的代码与接口所做的事情相同。 问题答案: 不允许这样做,因为您可以对抽象类做更多的事情。允许多重继承是没有意义的,前提是您只在可以使用接口的情况下才使用抽象类。 仅将抽象类用于无法通过接口执行的操作会更简单,在这种情况下,您将无法使用两个抽象父类。 注意:使
问题内容: 您将如何在以下示例代码中配置注释?我只想保留JPA注释,避免使用Hibernate特定的依赖项。 下面的代码正确吗? (这些类将具有多个版本,RefSomeOtherExample等,并且每个类一个db表。有些可能会添加其他字段(列),但大多数只会使用继承自“ RefData”基类的基本字段。) 基类: 最终,我想使用Hibernate的SchemaExport类从中生成模式创建脚本。
继承一个可以实现的普通超类有什么不同吗? atm我有一个名为的抽象类,我有/扩展这个。 abstractcar中的一个字段设置为"私有int容量" 但是在子类“小型汽车”中,当我输入“容量”作为构造函数中使用的变量时,它说“容量在抽象汽车中有私有访问” 我想: > 子类继承超类的所有字段和方法? 我现在该怎么进行?
我有一个抽象类,这个类是在她的子类中扩展的: < li >我在这个抽象类上实现了一个方法,并抽象了另一个方法 < li >实现的方法是每个子类对象都必须访问的通用方法。所以我决定在抽象类上实现它,避免在每个子类上实现相同的方法。 小例子: 我想听听你对这种实施方式的看法, 问候。
我在Hibernate中使用注释。我得到这个错误: 组织。冬眠MappingException:未知实体:xyz。豆在组织进行测试。冬眠实施。SessionFactoryImpl。位于org的getEntityPersister(SessionFactoryImpl.java:550)。冬眠事件def。DefaultLoadEventListener。org上的onLoad(DefaultLoad