我使用
有一个Spring Boot应用程序(嵌入式Tomcat,Thymeleaf模板......)private void Button_Click(object sender, RoutedEventArgs e)
{
// Initialize and show
var dialog = new System.Windows.Forms.FolderBrowserDialog();
System.Windows.Forms.DialogResult result = dialog.ShowDialog();
// Process result
if (result == System.Windows.Forms.DialogResult.OK)
{
string selectedPath = dialog.SelectedPath;
Button clickedButton = sender as Button;
StackPanel sp = clickedButton.Parent as StackPanel;
if (sp != null)
{
TextBox SelectedFolderTextBox = sp.Children.OfType<TextBox>().FirstOrDefault(x => x.Name == "SelectedFolderTextBox");
if (SelectedFolderTextBox != null)
SelectedFolderTextBox.Text = selectedPath;
}
}
}
我使用JPA和Hibernate的继承策略
我有这堂课:
spring-boot-starter-data-jpa
和另一个:
@Entity
@Table(name="t_alarm_notification")
@Inheritance (strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name= "ALARM_TYPE")
public abstract class AlarmNotification implements Serializable {
..
}
和另一个
@MappedSuperclass
public class BookAlarmNotification extends AlarmNotification {
/**
*
*/
private static final long serialVersionUID = 1L;
private Book book;
..
}
但是运行集成测试或者只是启动String Boot应用程序。我收到了这个错误:
public interface BookAlarmNotificationRepository extends CrudRepository<BookAlarmNotification, Long> {
}
答案 0 :(得分:3)
在我们在第11.1.38节(PDF页面471)中找到的JPA 2.1 specification文档中:
MappedSuperclass
注释指定一个类,其映射信息应用于从其继承的实体。映射的超类没有为其定义单独的表。...
使用
MappedSuperclass
注释指定的类可以以与实体相同的方式映射,除了映射将仅应用于其子类,因为映射不存在表 超类本身。
所以问题源于这样一个事实:您的实体类AlarmNotification
被错误地用作BookAlarmNotification
的基类。正如#34; Abdullah Khan&#34;的评论中所指出的,正确的注释方式是:
注释抽象基类AlarmNotification
,如:
@MappedSuperclass
@Inheritance (strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name= "ALARM_TYPE")
public abstract class AlarmNotification implements Serializable {
//..
}
对从中继承的类使用@Entity
注释:
@Entity
@Table(name="t_book_alarm_notification")
public class BookAlarmNotification extends AlarmNotification {
//..
}
因此, UnsatisfiedDependencyException / IllegalArgumentException
不是托管类型:class com.nicinc.persistence.domain.backend.BookAlarmNotification
不应再发生,因为它现在作为应用程序中的托管实体存在。
希望它有所帮助。
答案 1 :(得分:2)
@Entity
@Table(name="d_intervenant_tc")
@Inheritance(strategy= InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="Type", discriminatorType=DiscriminatorType.STRING)
public class Intervenant {
}
@Entity
public class Affilie extends Intervenant{
}