小编sma*_*ufo的帖子

@OneToOne和@JoinColumn,自动删除null实体,可行吗?

我有两个实体,具有以下JPA注释:

@Entity
@Table(name = "Owner")
public class Owner implements Serializable
{
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "id")
  private long id;

  @OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
  @JoinColumn(name="Data_id")
  private Data Data;  
}

@Entity
@Table(name = "Data")
public class Data implements Serializable
{
  @Id
  private long id;
}
Run Code Online (Sandbox Code Playgroud)

所有者和数据具有一对一的映射,拥有者是所有者.执行时发生问题:owner.setData(null); ownerDao.update(所有者) ; "Owner"表的Data_id变为null,这是正确的.

但"数据"行不会自动删除.我必须编写另一个DataDao,并用另一个服务层来包装这两个动作(ownerDao.update(owner); dataDao.delete(data);)

当拥有的所有者将其设置为null时,是否可以自动删除数据行?

orm hibernate jpa one-to-one

10
推荐指数
1
解决办法
2万
查看次数

Spring4 MVC Controller Pageable无法正常工作

我想在控制器中使用Spring自动构建Pageable对象.所以我定义:

@RequestMapping("/list")
public String list(Model model , Pageable pageable) {
  logger.info("pageable = {}" , pageable);
  // ... skipped
}
Run Code Online (Sandbox Code Playgroud)

我定义PageableHandlerMethodArgumentResolverWebMvcConfigurerAdapter:

@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {

  @Override
  public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
    PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
    resolver.setMaxPageSize(10);
    resolver.setOneIndexedParameters(true);
    argumentResolvers.add(resolver);
  }
}
Run Code Online (Sandbox Code Playgroud)

我将页面大小覆盖为10(默认为20),并设置为基于1的分页.运行页面时.我看到日志:

Controller - pageable = Page request [number: 0, size 10, sort: null]
Run Code Online (Sandbox Code Playgroud)

如果我?page=1&size=1在URL中添加参数' ',它仍会打印:

Controller - pageable = Page request [number: 0, size 10, sort: null]
Run Code Online (Sandbox Code Playgroud)

如果我将参数更改为?sort=id,它会记录:

Controller …
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc

10
推荐指数
1
解决办法
3901
查看次数

密封类的对象在被其他伴随对象引用时神秘地变为null

密封课程:

sealed class Alphabet(val name: String) {
  object A : Alphabet("A")
  object B : Alphabet("B")
  object C : Alphabet("C")
  object D : Alphabet("D")
  object E : Alphabet("E")

  companion object {
    val array = arrayOf(A, B, C, D, E)
    val list = listOf(A, B, C, D, E)
  }

  override fun toString(): String {
    return name
  }
}
Run Code Online (Sandbox Code Playgroud)

还有另一个带有伴侣对象的类:

class AlphabetMap {

  companion object {
    val map = mapOf(
      Alphabet.A to 1,
      Alphabet.B to 2,
      Alphabet.C to 3,
      Alphabet.D to 4,
      Alphabet.E …
Run Code Online (Sandbox Code Playgroud)

kotlin

10
推荐指数
2
解决办法
326
查看次数

如何将spring的服务bean注入JPA实体?

我的问题非常类似于:通过Spring将字段注入Hibernate加载的实体

不同之处在于,我使用的是JPA2实体,而不是hibernate.虽然底层仍然处于休眠状态(3.5.5).

我的春季版是3.0.4.

eventListenersJPA的世界中有什么相应的?

原帖的示例代码:

class Student {
   int id; //loaded from DB
   String name; //loaded from DB
   int injectedProperty; //Inject via Spring
   transient Service serviceImpl; //Inject via Spring
}
Run Code Online (Sandbox Code Playgroud)

我知道可能有aspectJ的解决方案,但我更喜欢纯java解决方案.谢谢.

spring hibernate dependency-injection jpa

9
推荐指数
1
解决办法
9239
查看次数

摘要DAO模式和Spring的"代理无法转换为......"问题!

我知道这经常被问到,但我找不到一个有效的解决方案:

这是我的AbstractDAO:

public interface AbstractDao<T>
{
  public T get(Serializable id);
  //other CRUD operations
}
Run Code Online (Sandbox Code Playgroud)

这是我的JPA实现:

public abstract class AbstractDaoJpaImpl<T> implements AbstractDao<T> , Serializable
{
  protected EntityManager em;

  protected Class<T> clazz;

  @SuppressWarnings("unchecked")
  public AbstractDaoJpaImpl()
  {
    ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
    this.clazz = (Class<T>) genericSuperclass.getActualTypeArguments()[0];
  }

  public abstract void setEntityManager(EntityManager em);  
  //implementations skipped
}
Run Code Online (Sandbox Code Playgroud)

这是一个实体的道:

public interface PersonDao extends AbstractDao<Person>
{
  //empty
}
Run Code Online (Sandbox Code Playgroud)

这是它的实现:

@Repository
public class PersonDaoImpl extends AbstractDaoJpaImpl<Person> implements PersonDao , OtherInterface
{
  @PersistenceContext(unitName="company")
  @Override
  public void setEntityManager(EntityManager em)
  { …
Run Code Online (Sandbox Code Playgroud)

java spring cglib genericdao

9
推荐指数
1
解决办法
2万
查看次数

JPQL的JPL Map <KEY,VALUE>查询失败

我在JPA中存储了一个Map,它存储了每种语言的关键字翻译.比如一个对象商店Locale.ENGLISH -> "Father" , Locale.CHINESE -> "PaPa".另一个对象存储Locale.ENGLISH -> "Mother" , Locale.CHINESE -> "MaMa";

这是我的工作设计:

public class Relation {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;

  @ElementCollection
  @MapKeyColumn(name="locale")
  @Column(name="value")
  @CollectionTable(name = "RelationName", joinColumns = @JoinColumn(name = "relation_id"))
  private Map<Locale, String> langMap = new HashMap<>();

  // other fields skipped
}
Run Code Online (Sandbox Code Playgroud)

它运行良好,我可以存储许多关键字翻译到DB.但是当用JPQL查询时,它有一些问题:

例如,我想找到哪个Relation的英文键值为"Father":

这是我的代码:

Relation r = em.createQuery("select r from Relation r join r.langMap m where ( KEY(m) = :locale and VALUE(m) = :value ) " , Relation.class)
  .setParameter("locale" …
Run Code Online (Sandbox Code Playgroud)

mysql hibernate jpa jpql

9
推荐指数
2
解决办法
8633
查看次数

RxJava Observable和Subscriber用于跳过异常?

如果我有一个Observalbe:

List<Integer> ints = Lists.newArrayList(1, 2, 0, 3, 4);
Observable<Integer> o1 = Observable.from(ints);
Run Code Online (Sandbox Code Playgroud)

我想生成另一个可观察的,除以12:

Observable<Integer> o2 = o1.map(i -> 12/i);
o2.subscribe(
  v -> logger.info ("Subscriber value {}", v) ,
  t -> logger.error("Subscriber onError {} : {}", t.getClass() , t.getMessage())
);
Run Code Online (Sandbox Code Playgroud)

很明显它会出错,并在遇到'0'时停止:

RxTest - Subscriber value 12
RxTest - Subscriber value 6
RxTest - Subscriber onError class java.lang.ArithmeticException : / by zero
Run Code Online (Sandbox Code Playgroud)

但是,如果我希望Observer(o2)跳过异常呢?

我查看了RxJava关于错误处理的文档,没有办法跳过错误.在onErrorResumeNext()onExceptionResumeNext()需要备份/回退 Observable,这不是我想要的.在onErrorReturn需要指定返回值.

所有三种错误处理方法都无法恢复原始观察者.例如 :

Observable<Integer> o2 = o1.map(i …
Run Code Online (Sandbox Code Playgroud)

java reactive-programming rx-java

9
推荐指数
2
解决办法
4610
查看次数

rxjava2的Maybe和Optional有什么区别?

医生说

从概念上讲,它是Single和Completable的联合,提供捕获排放模式的方法,其中可能存在0或1项或由某些反应源发出的错误信号.

但我不确定它的真正含义.它似乎是java8的Optional.

以下两个代码具有相同的结果,但我不知道Maybe可以做什么和Optional不能(或繁琐)做什么.

  @Test
  public void testMaybe1() {
    Observable.just(3, 2, 1, 0, -1)
      .map(i -> {
        try {
          int result = 6 / i;
          return Maybe.just(result);
        } catch (Exception e) {
          return Maybe.empty();
        }
      })
      .blockingForEach(maybe -> {
          logger.info("result = {}", maybe.blockingGet());
        }
      );
  }


  @Test
  public void testMaybe2() {
    Observable.just(3, 2, 1, 0, -1)
      .map(i -> {
        try {
          int result = 6 / i;
          return Optional.of(result);
        } catch (Exception e) { …
Run Code Online (Sandbox Code Playgroud)

java optional rx-java rx-java2

9
推荐指数
3
解决办法
1万
查看次数

Spring3的@Transactional @Scheduled没有承诺DB?

这是我第一次尝试Spring3的@Scheduled,但发现我无法承诺DB.这是我的代码:

@Service
public class ServiceImpl implements Service , Serializable
{
  @Inject 
  private Dao dao;

  @Override
  @Scheduled(cron="0 0 * * * ?") 
  @Transactional(rollbackFor=Exception.class)
  public void hourly()
  {
    // get xxx from dao , modify it
    dao.update(xxx);
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为它应该工作,我可以看到它每小时启动并从DB加载xxx,但数据不会提交给DB.

有许多人tx:annotation-driven在春天的XML:

<bean id="entityManagerFactoryApp" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="persistenceUnitName" value="myapp"/>
</bean>
<bean id="transactionManagerApp" class="org.springframework.orm.jpa.JpaTransactionManager">
  <property name="entityManagerFactory" ref="entityManagerFactoryApp" />
</bean>

<tx:annotation-driven transaction-manager="transactionManagerApp" />
Run Code Online (Sandbox Code Playgroud)

有人能告诉我我错过了什么吗?

我有一个' '的解决方案:

@Service
public class ServiceImpl implements Service , Serializable
{
  @Inject 
  private Dao dao;

  @Inject
  @Qualifier("transactionManagerApp")
  private PlatformTransactionManager …
Run Code Online (Sandbox Code Playgroud)

spring dependency-injection scheduling transactional spring-3

8
推荐指数
2
解决办法
6908
查看次数

如何在打包时使maven"添加目录条目"?

我有一个程序,getClass().getClassLoader().getResource()用于获取目录的URL,它在eclipse中工作正常,但在jared之后,它返回null.

根据这个网址:http: //www.coderanch.com/t/385935/java/java/getResource-path-fails-Jar

问题的结果是因为jar中不存在路径本身.存在路径的文件,但不存在路径本身.我在Eclipse中使用"Runnable JAR File"导出命令.当我尝试使用旧的导出"Jar文件"来创建jar时,我注意到" 添加目录条目 " 的复选框,这就是解决方案.Jar文件在jar中需要自己的目录条目,getResource()返回路径的URL.

但是在maven中,我无法在打包时找到"添加目录条目"的命令,有人可以给我一个提示吗?非常感谢 !

环境:eclipse 3.5,m2eclipse,maven 2.2.1

java jar getresource

7
推荐指数
1
解决办法
3220
查看次数