我有一个M:N relationsship喜欢这里,除了那有一些信息是与相关联的AuthorBook实体.所以我想,我不需要@JoinTable在所有的,应该建立一个class AuthorBook由一个链接到每个Author与Book和附加信息,对不对?
我试过了
@Entity
public class AuthorBook {
@Id @ManyToOne Author author;
@Id @ManyToOne Book book;
@LobOrWhatever AdditionalInformation additionalInformation;
}
Run Code Online (Sandbox Code Playgroud)
我遇到了问题(我不记得了).所以我介绍了一个@GeneratedId int id并更改了引用@NaturalId.这个作品大多良好,但好笑,它迫使我通过连接Author和Book到Session#byNaturalId这是没有意义的我(我有识别码与实体应取在一起).我也试过了
session.byNaturalId(AuthorBook.class)
.using("author.id", someAuthorId)
.using("book.id", someBookId)
.load();
Run Code Online (Sandbox Code Playgroud)
但这被拒绝告诉我"author.id"不是自然的id(实际上这是真的,因为自然id是"作者",但它的"id"同样有效).
看着网络,我发现每个人都在这样的表中使用id而不是实体,所以我想知道我是不是在尝试一些不可能的东西....(或者是愚蠢的).
这是我的存储库配置:
@Configuration
public class RepositoryConfing {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter){
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource);
entityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);
entityManagerFactoryBean.setPackagesToScan("com.imdb.model");
return entityManagerFactoryBean;
}
@Bean
public BasicDataSource dataSource(){
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("org.postgresql.Driver");
ds.setUrl("jdbc:postgresql://localhost:5432/imdb");
ds.setUsername("***");
ds.setPassword("***");
ds.setInitialSize(5);
return ds;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter(){
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
adapter.setDatabase(Database.POSTGRESQL);
adapter.setShowSql(true);
adapter.setGenerateDdl(false);
adapter.setDatabasePlatform("org.hibernate.dialect.PostgreSQLDialect");
return adapter;
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用merge方法时,我得到一个例外:javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'merge' call
可能是我RepositoryConfig缺少一些额外的配置? …